4

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

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

我知道其中有validate()andrepaint()方法,JFrame但这可能不适合它们。我不再是初学者,但也不是非常有经验,所以请耐心等待。

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

4

4 回答 4

4

是的,Cardlayout可用于切换"Cards",即屏幕上可见的不同面板。

也可以JPanels直接切换

jframe.getContentPane().remove(...); // Remove old panel from layout
jframe.getContentPane().add(...);
jframe.validate();
jframe.repaint()

请记住,不同的布局的工作方式不同,因此没有一种解决方案可以每次都有效。浏览不同 LayoutManager 的文档以了解它们是如何工作的。

于 2013-08-02T07:44:34.940 回答
2

您可以使用TabbedPane,隐藏选项卡并以编程方式从您的应用程序中切换它们。

这样(例如出于测试目的),您可以随时轻松启用选项卡并检查每个选项卡的状态。

但是,CardLayout是的,(总的来说)是个好方法。

您可能很想手动添加和删除面板到JFrame. 我建议不要这样做 - 您可能会遇到一些渲染问题,您的代码会变得更加复杂。此外,既然你已经有专门的课程来做这件事,你应该使用它们而不是重新发明轮子。

于 2013-08-02T07:51:06.613 回答
0

我会亲自删除 JFrame 的所有组件。像这样的东西:

myFrame.getContentPane().removeAll();

然后添加一个全新的内容窗格,然后重新绘制并重新验证框架。

于 2013-08-02T07:48:18.863 回答
0

将每个屏幕设计为一个 JPanel(将屏幕组件添加到 JPanel)。当您知道需要使用哪个屏幕时JFrame.setContentPane(Container contentPane)。这将替换 JFrame 中除菜单之外的所有内容。如果您需要页面的某些部分保持不变,则必须在 contentPane 上使用布局并将屏幕仅设置为布局的一部分(取决于布局,请参阅此处的布局详细信息)

于 2013-08-02T07:55:19.083 回答