我的意思是,如何设计一个用户界面,其中屏幕会因某些动作而改变,但程序完全在一个窗口上运行?换句话说,我认为它与导航网站的概念相同,例如,所有内容都发生在同一个窗口(网络浏览器)上,但屏幕内容随着每个动作而变化(按钮点击,链接点击等) )。
我查看了Java API并找到了CardLayout
类;我是朝着正确的方向前进还是有更简单的方法? (页面说CardLayout
有点复杂,建议那些愿意手动编码所有内容的人。
我知道validate()
中有repaint()
和JFrame
方法,但这可能不适合他们。我不再是初学者,但也不是非常有经验,所以忍受我。
任何指导都会有所帮助。非常感谢。
答案 0 :(得分:4)
是的,Cardlayout可用于切换"Cards"
,即屏幕上显示的不同面板。
您也可以直接使用
切换JPanels
jframe.getContentPane().remove(...); // Remove old panel from layout
jframe.getContentPane().add(...);
jframe.validate();
jframe.repaint()
请记住,不同的布局工作方式不同,因此没有单一的解决方案每次都有效。浏览不同LayoutManagers的文档,了解它们的工作原理。
答案 1 :(得分:2)
您可以使用TabbedPane,隐藏选项卡并以编程方式从应用程序中切换它们。
这种方式(例如用于测试目的)您可以随时轻松启用选项卡并检查每个选项卡的状态。
但是,CardLayout
(一般来说)是好的方法。
您可能想要手动添加和删除面板JFrame
。我建议反对它 - 你可能会解决一些渲染问题,你的代码会变得更复杂。此外,由于你已经有了专门的课程,你应该使用它们而不是重新发明轮子。
答案 2 :(得分:0)
我个人会删除JFrame的所有组件。这样的事情:
myFrame.getContentPane().removeAll();
然后添加一个全新的内容窗格,然后重新绘制并重新验证该框架。
答案 3 :(得分:0)
将每个屏幕设计为一个JPanel(将屏幕组件添加到JPanel)。如果您知道需要屏幕,请使用JFrame.setContentPane(Container contentPane)
。这将取代除菜单之外的JFrame中的所有内容。
如果您需要页面的某些部分保持相同,则必须在contentPane上使用布局并仅将屏幕设置为布局的一部分(取决于布局,请参阅layot详细信息here)