gpt4 book ai didi

java - CardLayout 与手动添加/删除 JPanel 有什么特别之处?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:20 25 4
gpt4 key购买 nike

在 StackOverflow 上已经有很多次用户提出这样的问题......

I have a main JPanel that contains a child JPanel. When the user clicks a button, the child JPanel should change to a different JPanel. How can I achieve this.

很多时候,用户实际上已经尝试实现这个问题,但无法让它工作。

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

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

我认为这是一个相当合理的答案,而且我个人已经在我自己的许多 Java 项目中毫无问题地使用了它。但是,我的回答总是遭到反对,每个人都只是说“使用 CardLayout”。

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

作为进一步的问题,您是否仍会为具有动态 JPanel 的界面建议 CardLayout。例如,我的大多数程序都实现了一个自定义插件框架,其中可能有数百个 JPanels,但我只在实际需要时加载和显示面板。对于程序的正常使用,绝大部分面板实际上不会被加载或需要。对于这种情况,我的编码方法是否是最好的解决方案,据我所知,CardLayout 将要求我实际创建所有 JPanel,即使大多数永远不会用过吗?

最佳答案

  • 使用 CardLayout,更容易实现松散耦合(尽管自己动手也不是不可能)
  • 对于 CardLayout,持卡人的 preferredSize 是它持有的最大卡片的大小。
  • CardLayout 更难 fark-up,并允许几乎微不足道的连续组件交换其 next()prev()方法。
  • 您可以轻松地将所需的组件与常量相关联——无需创建 Map<String, Component>为此目的,因为它已经为您准备好了。为此,我经常使用枚举。
  • 无需记得调用repaint()revalidate()交换组件时。
  • 它专为组件而构建并允许轻松重复使用组件。

关于java - CardLayout 与手动添加/删除 JPanel 有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com