Java:单帧与多帧

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

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

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

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

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

销毁主JFrame会很愚蠢 – 更不用说用户的震撼了。 只需使用一个JFrame并更改其内容即可。

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

有一个名为CardLayoutLayoutManager ,它是实现这种情况的理想选择 – 它管理组件的“堆栈”,并且一次只显示其中一个组件。 在JFrame使用BorderLayout 。 进入中心位置放一个带有CardLayoutJPanel 。 然后将向导的各个页面添加到该JPanel ,以便CardLayout可以管理它们。

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