如何在同一窗口上创建多个屏幕?

时间:2013-08-02 07:36:26

标签: java swing jframe jpanel

我的意思是,如何设计一个用户界面,其中屏幕会因某些动作而改变,但程序完全在一个窗口上运行?换句话说,我认为它与导航网站的概念相同,例如,所有内容都发生在同一个窗口(网络浏览器)上,但屏幕内容随着每个动作而变化(按钮点击,链接点击等) )。

我查看了Java API并找到了CardLayout类;我是朝着正确的方向前进还是有更简单的方法? (页面说CardLayout有点复杂,建议那些愿意手动编码所有内容的人。

我知道validate()中有repaint()JFrame方法,但这可能不适合他们。我不再是初学者,但也不是非常有经验,所以忍受我。

任何指导都会有所帮助。非常感谢。

4 个答案:

答案 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