【发布时间】:2012-05-28 12:06:26
【问题描述】:
在 StackOverflow 上有很多次用户提出这样的问题...
我有一个主
JPanel,其中包含一个子JPanel。当用户点击一个 按钮,孩子JPanel应该更改为不同的JPanel。我怎样才能 实现这一目标。
通常情况下,用户实际上已尝试实现此问题,但无法使其正常工作。
每当我回答这个问题时,我都会告诉他们做这样的事情(简单地说)......
JPanel myFrame = new JPanel();
myFrame.remove(oldPanel);
myFrame.add(newPanel);
我认为这是一个相当合理的答案,而且我个人在我自己的许多 Java 项目中都使用过它,没有任何问题。但是,我的回答总是遭到反对,每个人都只是说“使用CardLayout”。
所以我的问题是,为什么每个人都对CardLayout 如此着迷,以至于我的回答值得一票否决?为什么我应该选择使用CardLayout 而不是使用上面的代码添加/删除面板?
作为另一个问题,您是否仍然建议 CardLayout 用于具有动态 JPanel 的接口。例如,我的大多数程序都实现了一个自定义插件框架,其中可能有数百个JPanels,但我只加载和显示实际需要的面板。对于程序的正常使用,大多数面板实际上永远不会被加载或需要。对于这种情况,我的编码方法是否是最佳解决方案,因为我知道CardLayout 将要求我实际创建所有JPanels,即使大多数都不会使用?
【问题讨论】:
-
我认为您在以建设性的方式表达您的问题方面做得很好。我希望它不会被关闭。
-
谢谢你 - 我特意试着把它变成一个建设性的问题,很高兴得到一些好的反馈。
-
“但我只加载和显示实际需要的面板。” 延迟实例化也可以与
CardLayout一起使用,它支持数千个面板。 -
谢谢@AndrewThompson,我不确定
CardLayout是否支持它,所以有点想把它扔进去以验证它是否支持/不支持这样的活动。 -
@WATTOStudios 请不要批准suggested edits like this。如果需要,请参阅此meta post 了解详细信息。
标签: java swing jpanel layout-manager cardlayout