CardLayout与手动添加/删除JPanels有何特别之处?

wattostudios:

在StackOverflow上有很多次用户问这样的问题...

我有一个JPanel包含一个孩子的主体JPanel当用户单击按钮时,孩子JPanel应更改为另一个JPanel我该如何做到这一点。

通常,用户实际上曾尝试实现此问题,但无法使其正常工作。

每当我回答这个问题时,我都会告诉他们做这样的事情(简单地说)...

JPanel myFrame = new JPanel();
myFrame.remove(oldPanel);
myFrame.add(newPanel);

我认为这是一个很合理的答案,而且我个人在许多自己的Java项目中都使用了它,没有问题。但是,我总是不满意我的回答,每个人都只是说“使用CardLayout”。

所以我的问题是,为什么每个人都对它如此着迷CardLayout,以至于我的答案值得一票?为什么我应该选择使用CardLayout上面的代码而不是添加/删除面板?

另一个问题是,您是否仍建议CardLayout使用动态JPanels的接口。例如,我的大多数程序都实现了一个自定义插件框架,其中可能有数百个JPanels,但是我仅按实际需要加载和显示面板。对于程序的正常使用,绝不会实际加载或要求使用大多数面板。对于这种情况,我的编码方法是否会是最好的解决方案,因为据我了解,即使绝大部分都不会使用,我CardLayout还是需要实际创建所有这些JPanels方法?

充满鳗鱼的气垫船:
  • 有了CardLayout,松散的耦合就更容易了(尽管用自己的手滚动并非不可能)
  • 使用CardLayout时,持卡人的preferredSize是它持有的最大卡的大小。
  • CardLayout比较难处理,并允许几乎琐碎的连续组件交换其next()prev()方法。
  • 您可以轻松地将所需的组件与常量关联-无需为此创建一个Map<String, Component>,因为它已经为您服务。我并没有经常使用枚举。
  • 无需记住调用repaint()revalidate()交换组件时。
  • 它是专为轻松使用组件而设计的。

但是我无法解释投票否决的原因,除非他们不高兴,否则您没有提到需要记住调用repaint()revalidate()交换组件时的需要您将不得不询问投票否决者是否足够勇敢做出回应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章