当前位置: 首页 > 面试题库 >

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

李俭
2023-03-14
问题内容

在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()交换组件时。
  • 它是专为轻松使用组件而html" target="_blank">设计的。

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



 类似资料:
  • 问题内容: 我现在有一个发送HTTP请求的SwingWorker,并且我重写了SwingWorker的done()方法来更改JFrame中的内容。我想基本上删除所有内容,并根据服务器返回的值在JFrame上添加一个新的成员面板。 现在,我面临的问题是,当我在JFrame上调用以下方法时,它不会从JFrame中删除任何内容,也不会更改它在Frame中包含的内容。 我当前的修复方法如下,但我宁愿更改J

  • 问题内容: 我在3个单独的类中有3个窗口,我想使用cardLayout,以便当你单击next按钮时,将出现下一个窗口。如何将包含不同元素的JPanels添加到一个cardLayout?这是第一个窗口:(尽管唯一的区别是背景-但它代表了我实际得到它的想法) 第二个窗口: 最后一个: 问题答案: 我做了一个小程序,希望程序中写的注释可以指导你了解如何使用CardLayout。

  • 问题内容: 我想通过单击JPanels上的按钮在JPanels之间切换。 例如:我有一个带有JButton simknop的JPanel sim和一个带有JButton helpknop的JPanel帮助,我想通过单击按钮在这两个JPanel之间进行切换。当我单击JButton simknop时,应显示JPanel帮助;当我单击JButton帮助时,应显示JPanel sim。 您可以在下面找到不

  • 问题内容: 我正在使用创建一个CheckList应用程序。我想知道如何添加滑动以删除。 这是我的ViewController.swift: 这是MyTableViewCell.swift: 我将iOS8用作部署目标(不确定会造成什么变化)。 问题答案: 添加以下两个功能: Swift 3.0: 斯威夫特4.2

  • 本文向大家介绍jQuery动态添加与删除tr行实例代码,包括了jQuery动态添加与删除tr行实例代码的使用技巧和注意事项,需要的朋友参考一下 这篇文章给大家分享的是一个用Jquery实现动态添加和删除tr行的小例子 下面是实现的样子,当然没有样式: 点击添加按钮可以添加一行: 点击删除可以删除本行: 基本功能是这样,下面是代码: 总结 以上就是jQuery动态添加与删除tr行的全部内容,希望本文

  • 如何删除用户所在的当前卡。我知道如何使用next和previous函数通过一个卡片布局,但是如何删除用户正在使用的当前帧呢?例如,如果我有一个程序,其中我目前在第3个面板中的5个面板,我将如何删除当前的一个,这是第3个面板。一旦您移除它,下一个或上一个将替换它。我不认为可以使用removecurrentlayout,因为我没有删除组件。例如,在代码中,如果我在卡3上,我将如何删除卡3。