Java ComboBox 返回 -1/null

标签 java swing combobox null jcombobox

我在我的程序中使用了一个组合框(示例如下),它有多种选择。 如果我想读出 ComboBox,它会为索引返回 -1,为项目返回“null”。 是否有人遇到了这个问题并且可以帮助我?

提前致谢!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class TestBox extends JFrame {
  // start attributes
  private JComboBox jComboBox1 = new JComboBox();
  private DefaultComboBoxModel jComboBox1Model = new DefaultComboBoxModel();
  // end attributes

  public TestBox(String title) { 
    // frame-initialization
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300; 
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);



// start components
    String[] list = {"1", "2", "3"};
    jComboBox1.setModel(jComboBox1Model);
    JComboBox jComboBox1 = new JComboBox(list);
    jComboBox1.setBounds(24, 40, 150, 20);
    jComboBox1.addItemListener(new ItemHandler());
    add(jComboBox1);
    // end components   
    setVisible(true);
  } // end of public TestBox  

  // start methods
  private class ItemHandler implements ItemListener{
    @Override
    public void itemStateChanged(ItemEvent e) {
      System.out.println("Changed Index to: " + jComboBox1.getSelectedIndex());
    }    
  }  
  // end methods 
  public static void main(String[] args) {
    new TestBox("TestBox");
  } // end of main  
} // end of class TestBox

最佳答案

您通过在构造函数中重新声明 来隐藏 jComboBox1 变量。这意味着类中的变量与显示的对象不同。

这里:

public TestBox(String title) { 
    super(title);
    // ....

    JComboBox jComboBox1 = new JComboBox(list);  // *****
    // ...
}

解决方案:不要重新声明变量!

public class Foo {
   private JTextField bar;

   public Foo() {
     JTextField bar = new JTextField(10);  // re-declaring bar here
   }
}

做:

public class Foo {
   private JTextField bar;

   public Foo() {
     bar = new JTextField(10);  // ** see the difference? **
   }
}

还有

虽然您的直觉可能是使用 null 布局并在您的组件上调用 setBounds(...) 以绝对定位放置它们,但我建议您不要这样做,因为这会导致 GUI 非常不灵活,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难更新和维护。相反,您需要研究和学习布局管理器,然后嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦的复杂 GUI。

关于Java ComboBox 返回 -1/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758206/

相关文章:

java - 如何删除Android字符串中间的空行

java - 如何在 Windows 上提取包含多字节字符和禁止字符的 tar.gz

java - 多线程套接字服务器通过消息关闭Java

java - for 循环通过矩形的 ArrayList 检查交集

java - 在 Java 中运行两次 GUI 应用程序

java - 获取其当前监视器上的组件位置

java - 在没有渲染器的情况下更改 JComboBox 颜色

c# - 用月份和月份数字填充组合框

java - 带有注释的奇怪 Java 错误

c# - 在 mysql 填充的组合框顶部添加 "---OTHERS---"