【问题标题】:Java: single frame vs multiple framesJava:单帧与多帧
【发布时间】:2012-03-10 22:12:19
【问题描述】:

想想经典的安装过程,其中有一个“下一步”按钮,当您单击它时,窗口的内容会发生变化。为了表示这种情况,我想到了两种可能的解决方案:

-当点击“下一步”时,销毁当前的 JFrame 并创建一个新的 JFrame,可能会将有用的信息传递给他的构造函数(例如实际窗口大小,用户在当前帧中插入的内容,...)

-单击“下一步”时,从当前 JFrame 中删除所有组件并根据需要添加新组件

第一个解决方案在 OO 编程方面看起来要好得多,因为我可以为不同的框架保留单独的类,并且我可以避免清空框架并重新填充它的巨大方法。然而,第一个解决方案听起来有点“脏”,我应该将很多参数传递给新框架。为了代表这种情况,我会选择第二种解决方案。

现在考虑一个带有“选项”组件的菜单:在这种情况下,当单击“选项”时,我将创建一个新的 JFrame,以便我可以用选项项填充它。这是一个正确的解决方案吗?有没有办法让我总能知道哪个是最好的解决方案?有没有我没有想到的解决方案?

【问题讨论】:

标签: java swing user-interface jframe layout-manager


【解决方案1】:

销毁主要的JFrame 将是愚蠢的——更不用说对用户的影响了。只需使用单个 JFrame 并更改其内容。

要实现安装程序向导,请使用单个JFrame,其中包含一个位于顶部的大JPanel,一个较小的包含位于底部的“下一步”、“返回”、“取消”按钮。当按下NextBack 按钮时,您将替换大的JPanel。您可以有许多不同的JPanel 子类,向导的每个“页面”都有一个。

有一个名为CardLayoutLayoutManager 非常适合实现此场景——它管理组件的“堆栈”,并且一次只显示其中一个组件。在JFrame 中使用BorderLayout。在中心位置放置一个JPanel 和一个CardLayout。然后将向导的各个页面添加到该JPanel,以便CardLayout 可以管理它们。

【讨论】:

  • 谢谢欧内斯特,您的解决方案似乎非常好。是否存在更适合创建新 JFrame 的情况(可能会破坏旧的 JFrame)?如果答案是肯定的,你能给我举个例子吗?我应该如何在这两种策略之间做出选择?
  • 不是真的,我认为这没有任何意义。
【解决方案2】:

CardLayout 非常适合这种情况。当按下“下一步”按钮时,您只需更换 JPanel 内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多