Java 使用2个或更多帧

Java 使用2个或更多帧,java,swing,jframe,Java,Swing,Jframe,我的JavaSwing应用程序中大约有3个框架。如何正确处理这些框架?我指的是某种模式或其他东西。现在我总是有一个代表框架的类,还有一个代表面板的类,在这个框架中是主要的。现在我已经将帧定义为静态变量,当我想隐藏它们时,我调用 classname.frameName.setVisible(false) 这是正确的解决方案吗?通过静态引用控制帧似乎是一个非常脆弱的解决方案。如果引用为null怎么办?如果对帧调用setVisible()时该帧未处于完成状态,该怎么办 最好将该逻辑分离成一个单独的类,

我的JavaSwing应用程序中大约有3个框架。如何正确处理这些框架?我指的是某种模式或其他东西。现在我总是有一个代表框架的类,还有一个代表面板的类,在这个框架中是主要的。现在我已经将帧定义为静态变量,当我想隐藏它们时,我调用
classname.frameName.setVisible(false)


这是正确的解决方案吗?

通过静态引用控制帧似乎是一个非常脆弱的解决方案。如果引用为null怎么办?如果对帧调用
setVisible()
时该帧未处于完成状态,该怎么办


最好将该逻辑分离成一个单独的类,或者让帧自己注册到该类中,或者预先构造所有内容。

这种设计似乎有缺陷。您应该使用适当的布局管理器,而不是使用多个容器。在这种情况下,我建议使用。通过这种方式,您将拥有一个具有多个可交换视图的单个容器

除了
CardLayout
JFrame
具有多个
JDialog
实例的(优秀)建议之外,以下是一些单独或组合使用的其他策略,将各种内容窗格折叠到单个框架中

  • JDesktopPane
    /
    JInternalFames
    ()
  • JSplitPane
    ()
  • JTabbedPane
    ()
  • JLayeredPane
    ,如果你感到勇敢()
  • JToolBar
    -如果需要可浮动()
  • a
    JPanel在a中的不同约束
  • 可能还有更多


    当然,正如Adamski指出的,还有一些怪癖要考虑…

    如果每个帧都有JMenus或JMenus呢


    可能将它们组合为子菜单。

    看看一个像样的对接框架,例如。这允许您在一个
    JFrame
    中显示所有三个组件,但非常灵活,您可以并排查看数据,调整组件大小并最大化组件。

    是的,我认为这不是一个很好的解决方案,所以我在寻找更好的解决方案。也许我应该有一些工厂来框架一些静态类,在其中构造函数我将创建我需要的所有框架,然后我调用它们,但它仍然是静态框架,我不喜欢静态变量:)我不同意。拥有多个帧可能有一个完全合理的理由,但仍有一些应用程序使用这种方法。我的意思是,看看GIMP;用户界面是一件艺术作品(实际上是垃圾,但你明白我的意思)。嗯,cardLayout看起来很有趣。但正如我所说,我有3个框架,因为有时我需要看到1和2,或者有时只有3…@Adamski我不同意如何管理(以某种方式捕获)3个JFrame的想法(另一个答案可能是,如果有一个JFrame和两个JDialogs/JWindows),在这种情况下,最好看看CardLayout(@mre+1)@Andrew:我在讽刺GIMP;它一定是有史以来最糟糕的用户界面之一。我只是强调答案中的假设,即CardLayout是合适的。如果每个帧都有JMenus或JMenus呢?如果用户需要同时查看所有3组信息,该怎么办?@Andrew:你应该查看完整的48组信息;我听说你开始产生幻觉了。对于不同的建议+1:-)+1:Re。工具栏我倾向于通过定义一个类来解决这个问题:MyAppPanel,它公开了一个类似getToolbarActions()的方法。当面板获得焦点时(例如,假设它是JTabbedPane的一部分),我会拉出面板的动作,并动态地向JToolBar添加按钮。此外,我倾向于使用一些永久性的“全局”工具栏操作。