【发布时间】:2011-10-25 13:22:17
【问题描述】:
我的 java swing 应用程序中有大约 3 个帧。如何处理这些帧的正确方法是什么?我的意思是某种模式或其他东西。现在我总是有一个类代表框架,一个类代表这个框架中的主要面板。现在我已将帧定义为静态变量,当我想隐藏它们时,我调用
classname.frameName.setVisible(false);
这是正确的解决方案吗?
【问题讨论】:
我的 java swing 应用程序中有大约 3 个帧。如何处理这些帧的正确方法是什么?我的意思是某种模式或其他东西。现在我总是有一个类代表框架,一个类代表这个框架中的主要面板。现在我已将帧定义为静态变量,当我想隐藏它们时,我调用
classname.frameName.setVisible(false);
这是正确的解决方案吗?
【问题讨论】:
除了CardLayout 或JFrame 与多个JDialog 实例的(优秀)建议之外,这里还有一些其他策略可以单独或组合使用,将各种内容窗格折叠到一个框架中。
JDesktopPane/JInternalFames (Tut.)。 JSplitPane (Tut.)。 JTabbedPane (Tut.)。JLayeredPane,如果你觉得勇敢的话 (Tut.)。JToolBar - 如果需要可以浮动 (Tut.)。JPanel 在nested layout 中的不同约束。可能还有更多..
当然,正如 Adamski 指出的那样,还有一些其他的怪癖需要考虑..
如果每个框架都有 JMenuBars 或 JMenus 怎么办?
可能将它们组合为子菜单。
【讨论】:
看看像MyDoggy这样的不错的对接框架。这允许您在单个 JFrame 中显示所有三个组件,但非常灵活,您可以并排查看数据、调整组件大小和最大化组件。
【讨论】:
这个设计似乎有缺陷。您应该使用适当的布局管理器,而不是拥有多个容器。在这种情况下,我建议使用CardLayout。这样,您将拥有一个具有多个可交换视图的单个容器。
【讨论】:
通过静态引用控制框架似乎是一个非常脆弱的解决方案。如果引用为空怎么办?如果调用 setVisible() 时框架未处于完成状态怎么办?
将这个逻辑分离到一个单独的类中,或者让框架自己注册到它,或者预先构建所有东西,这可能是一个更好的主意。
【讨论】: