Java:单帧与多帧

时间:2012-02-20 15:11:18

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

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

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

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

第一个解决方案在OOprogramming方面看起来更好,因为我可以为不同的帧保留单独的类,我可以避免使用大量方法清空帧并重新填充它。然而,第一个解决方案听起来有点“脏”,我应该将大量参数传递给新帧。为了表示这种情况,我会选择第二种解决方案。

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

2 个答案:

答案 0 :(得分:5)

销毁主JFrame会很愚蠢 - 更不用说用户的刺耳了。只需使用一个JFrame并更改其内容。

要实施安装程序向导,请在顶部使用包含一个大JFrame的单个JPanel,在底部使用包含“下一个”,“后退”,“取消”按钮的较小的一个Next。按下BackJPanel按钮后,您将替换较大的JPanel。您可以拥有许多不同的LayoutManager子类,一个用于向导的每个“页面”。

有一个名为CardLayout的{​​{1}}非常适合实现这种情况 - 它管理组件的“堆栈”,并且一次只显示其中一个组件。在BorderLayout中使用JFrame。进入中心位置会JPanelCardLayout。然后将向导的各个页面添加到JPanel,以便CardLayout可以管理它们。

答案 1 :(得分:3)

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