考虑经典安装过程,您有一个“下一步”按钮,当您单击它时,窗口内容会发生变化。为了表示这种情况,我想到了两种可能的解决方案:
- 单击“next”时会破坏当前的JFrame并创建一个新的JFrame,可能会传递给他的构造函数有用的信息(例如实际窗口大小,用户在当前帧中插入的内容,......)
- 单击“下一步”时从当前JFrame中删除所有组件并根据需要添加新组件
第一个解决方案在OOprogramming方面看起来更好,因为我可以为不同的帧保留单独的类,我可以避免使用大量方法清空帧并重新填充它。然而,第一个解决方案听起来有点“脏”,我应该将大量参数传递给新帧。为了表示这种情况,我会选择第二种解决方案。
现在考虑带有“选项”组件的菜单:在这种情况下,我会在单击“选项”时创建一个新的JFrame,这样我就可以用选项项填充它。这是正确的解决方案吗?有没有办法让我总能知道哪一个是最好的解决方案?有没有我没想过的解决方案?
答案 0 :(得分:5)
销毁主JFrame
会很愚蠢 - 更不用说用户的刺耳了。只需使用一个JFrame
并更改其内容。
要实施安装程序向导,请在顶部使用包含一个大JFrame
的单个JPanel
,在底部使用包含“下一个”,“后退”,“取消”按钮的较小的一个Next
。按下Back
或JPanel
按钮后,您将替换较大的JPanel
。您可以拥有许多不同的LayoutManager
子类,一个用于向导的每个“页面”。
有一个名为CardLayout
的{{1}}非常适合实现这种情况 - 它管理组件的“堆栈”,并且一次只显示其中一个组件。在BorderLayout
中使用JFrame
。进入中心位置会JPanel
加CardLayout
。然后将向导的各个页面添加到JPanel
,以便CardLayout
可以管理它们。
答案 1 :(得分:3)
CardLayout非常适合这种情况。您只需在按下“下一步”按钮时换出JPanel内容。