【问题标题】:Working with 2 or more frames使用 2 个或更多帧
【发布时间】:2011-10-25 13:22:17
【问题描述】:

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

这是正确的解决方案吗?

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    除了CardLayoutJFrame 与多个JDialog 实例的(优秀)建议之外,这里还有一些其他策略可以单独或组合使用,将各种内容窗格折叠到一个框架中。

    1. JDesktopPane/JInternalFames (Tut.)。
    2. JSplitPane (Tut.)。
    3. JTabbedPane (Tut.)。
    4. JLayeredPane,如果你觉得勇敢的话 (Tut.)。
    5. JToolBar - 如果需要可以浮动 (Tut.)。
    6. JPanelnested layout 中的不同约束。

    可能还有更多..


    当然,正如 Adamski 指出的那样,还有一些其他的怪癖需要考虑..

    如果每个框架都有 JMenuBars 或 JMenus 怎么办?

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

    【讨论】:

    • +1:回复。我倾向于通过定义一个类来解决这个问题:MyAppPanel,它公开了一个类似 getToolbarActions() 的方法。当面板获得焦点时(例如,假设它是 JTabbedPane 的一部分),我会拉出面板动作并即时向 JToolBar 添加按钮。此外,我倾向于使用一些永久性的“全局”工具栏操作。
    【解决方案2】:

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

    【讨论】:

    • 对于不同的建议 +1 :-)
    【解决方案3】:

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

    【讨论】:

    • 我不同意。拥有多个帧可能有一个完全正当的理由,并且仍然有应用程序使用这种方法。我的意思是,看看 GIMP;用户界面是一件艺术品(实际上是垃圾,但你明白我的意思)。
    • 嗯,cardLayout 看起来很有趣。但正如我所说,我有 3 帧,因为有时我需要看到 1 和 2,或者有时只需要 3...
    • @Adamski 我不同意如何管理(以某种方式捕获)3 个 JFrame(另一个答案可能是是否有一个 JFrame 和两个 JDialog/JWindows),在这种情况下,最好寻找 CardLayout( @mre +1)
    • @Andrew:我在讽刺 GIMP;它必须是有史以来最糟糕的用户界面之一。我真的只是强调 CardLayout 是合适的答案中的假设。如果每一帧都有 JMenuBars 或 JMenus 怎么办?如果用户需要同时查看所有 3 组信息怎么办?
    • @Andrew:你应该选择完整的 48;我听说你在那个时候开始产生幻觉。
    【解决方案4】:

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

    将这个逻辑分离到一个单独的类中,或者让框架自己注册到它,或者预先构建所有东西,这可能是一个更好的主意。

    【讨论】:

    • 是的,我认为这不是很好的解决方案,所以我在寻找更好的解决方案。也许我应该有一些工厂来构建一些静态类,在构造函数中我将创建我需要的所有框架,然后我调用它们,但它仍然是静态框架,我不喜欢静态变量:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2018-03-09
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多