【问题标题】:JTextField with JComboBox is not working properly带有 JComboBox 的 JTextField 无法正常工作
【发布时间】:2016-11-13 10:28:48
【问题描述】:

我希望当用户在JComboBox 列表中选择“额外”时出现JTextField,否则隐藏。但是当用户选择“Extra”时,JTextField 没有出现,但如果我缩小窗口并再次放大,它就会出现。这样做之后它工作正常,只是第一次没有出现。为什么它会这样?有什么解决办法吗?

这是我的代码:

getCmbJtocsv_C_8().addActionListener(new ActionListener() { 
   public void actionPerformed(ActionEvent e) {
   {

      input3 = (String)adaptor.getCmbJtocsv_C_8().getSelectedItem();
      adaptor.getTxtJtocsv_C_8().setVisible(false);

      if(input3.equals("extra")){
          adaptor.getTxtJtocsv_C_8().setVisible(true);
      }
}

我更改了字符串比较,但仍然得到相同的结果。

【问题讨论】:

  • 这是您的问题。输入3 = =“额外”。你需要学习如何比较(字符串)对象
  • 我也试过 input3.equals("extra"),结果还是一样。
  • 可能的原因可能是您使用的布局管理器。完整的代码或可运行的代码段可能有助于清楚地解决问题。
  • 这个问题最初是作为副本关闭的:stackoverflow.com/questions/513832/…。尽管比较是一个问题,但该问题还指出代码在调整框架大小后可以工作,如果比较是唯一的问题,情况就不会如此。因此,我重新打开了这个问题,并等待 OP 发布正确的SSCCE,以便我们提供更多帮助。

标签: java swing jtextfield jcombobox


【解决方案1】:

默认情况下,Swing 组件的大小为 (0, 0)。组件的大小/位置由布局管理器在框架打包或可见时确定。

所以我猜想既然你从不可见的文本字段开始,它的父面板的大小不包括文本字段。当您调整框架的大小时,会出现文本字段,因为它的大小和面板的大小会重新计算。

现在已经计算了文本字段的大小,因此您可以根据需要切换可见性。

如果这没有帮助,请发布 SSCCE 来说明问题。那就是创建一个只有组合框和文本字段的框架来演示问题。将来所有问题都应该包含 SSCCE,因为我们无法根据几行代码猜测您的应用程序的上下文。

【讨论】:

  • 是的,这就是这里的确切问题。现在我将布局更改为卡片布局,在第一张卡片中,面板将为空,在第二张卡片中,文本框将在那里。然后我正在展示相应需要的卡。现在代码可以正常工作了,谢谢...
  • @mariz, i changed my layout to card layout - 让布局管理器完成工作总是一个好主意。