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