【问题标题】:Is there an way to remove a JTextFiled if a certain item in JComboBox is selected in java?如果在 java 中选择了 JComboBox 中的某个项目,有没有办法删除 JTextFiled?
【发布时间】:2021-04-22 23:15:50
【问题描述】:

我有一个注册面板,如果学生、教师和课程管理员可以在其中注册,因此如果选择了学生,它应该在选择学生时显示如下内容:

如果在选择其他两个中的任何一个时选择了其他两个,则应该显示如下:

我尝试在添加了这些文本字段的选定项目上使用 if 条件,但它似乎仅在我根据预先选择的内容运行程序开始时才有效,并且在我在 JComboBox 中选择其他项目。有解决办法吗?

【问题讨论】:

  • 使用CardLayout。阅读 How to Use CardLayout 上的 Swing 教程部分。该示例展示了如何在从组合框中选择项目时“交换”面板。
  • @camickr 非常感谢您,我已经尝试找到解决方案一段时间了。谢谢。

标签: java swing actionlistener jtextfield jcombobox


【解决方案1】:

您可以通过不同的方式实现这一目标。其中一种方法是使用Action Listeners。进行选择时,JComboBox 对象会生成一个操作事件(请参阅Handling Events on a Combo Box)。

在您的情况下,您需要根据组合框中的选择触发事件。此操作应该会更改面板中组件的可见性,这些组件只是将 visible 属性从 true 更改为 false(反之亦然),具体取决于所做的选择。

【讨论】:

  • 是的,谢谢它的工作,但我已经使用 gridbagconstaints 添加这些字段,所以当这些字段在注册按钮下方设置为 false 时存在间隙,那么我该如何消除该间隙?
  • @NutanPanta 存在差距,我该如何消除差距? 这就是为什么你不应该玩弄单个组件的可见性。每个布局管理器将确定是否尊重可见性。 CardLayout 就是为这个要求而设计的。
  • @camickr 您的说法不准确。顾名思义,布局管理器主要负责组件在容器中的定位。正如您所建议的,CardLayout 可以通过创建具有不同配置和组件状态的不同视图(面板)来实现类似的功能,但“组件的可见性”本身并不是任何布局管理器的明确责任。组件的布局和状态是两个不同的东西。
  • @NutanPanta 您可以按照 camickr 的建议进行操作,也可以从容器中删除组件并重建它并根据需要添加。使用卡片布局的主要缺点是面板的数量可能会随着您所做的选择数量的增加而增加。如果您的问题保持不变,则对于此特定情况,创建两个面板并根据选择在它们之间切换可能会更容易。但是您也可以完全删除不需要的组件。只有你知道需要什么。无论如何,事件的触发器是相同的。
  • 我认为@camickr 在这种情况下是正确的,它不仅会导致我的布局出现问题,还会在添加数据时导致额外的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
相关资源
最近更新 更多