在StackOverflow上有很多次用户问这样的问题...
通常,用户实际上曾尝试实现此问题,但无法使其正常工作。
每当我回答这个问题时,我都会告诉他们做这样的事情(简单地说)...
JPanel myFrame = new JPanel();
myFrame.remove(oldPanel);
myFrame.add(newPanel);
我认为这是一个很合理的答案,而且我个人在我自己的许多Java项目中都使用了它,没有问题。但是,我总是不满意我的回答,每个人都说“使用
CardLayout
”。所以我的问题是,为什么每个人都对
CardLayout
如此着迷,以至于我的答案值得反对?为什么我应该选择使用CardLayout
而不是使用上面的代码添加/删除面板?进一步的问题是,您是否仍建议为具有动态JPanels的接口(interface)使用
CardLayout
。例如,我的大多数程序都实现了一个自定义插件框架,其中可能有数百个JPanels
,但是我仅按实际需要加载和显示面板。对于程序的正常使用,绝不会实际加载或要求使用大多数面板。对于这种情况,我的编码方法是否是最好的解决方案,因为我知道CardLayout
将要求我实际创建所有JPanels
,即使绝不会使用大多数ojit_code? 最佳答案
next()
和prev()
方法。 Map<String, Component>
,因为它已经为您服务。我没有经常使用枚举。 repaint()
和revalidate()
。 不过,我无法解释投票否决的原因,除非他们不高兴,否则您没有提到交换组件时需要记住调用
repaint()
和revalidate()
的需要。您将不得不询问投票否决者是否足够勇敢做出回应。