JComboBox中的文本显示一个字符串,但选择实际上设置为null

时间:2014-02-13 16:17:51

标签: java jcombobox

我使用以下代码创建了JComboBox

employeeDeletetxt = new JComboBox(buildComboBoxmodel("SELECT employee_id, employee_first_name     FROM employees"));
employeeDeletetxt.setSelectedItem(null);

现在,当我运行程序时,选择设置为null,因此组合框中不显示任何内容。我有一个ActionListener删除按钮。 ActionListener会删除某些记录,当发生这种情况时,我需要JComboBox中的数据来反映最近的更改。我使用以下代码:

employeeDeletetxt.removeItem(employeeDeletetxt.getSelectedItem());                      
employeeDeletetxt.setSelectedItem(null); 

问题是调用这些行后JComboBox中显示的文本不为空。但是,JComboBox指向的项目实际上是null,因为我在上次调用ActionListener之后直接调用Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 时收到以下错误消息:

{{1}}

如何将文字设置为空?

3 个答案:

答案 0 :(得分:1)

我试图实现你所描述的内容并达到目的:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class TestGui extends JFrame{

JPanel contentPane = new JPanel();
JButton button = new JButton("Press me!");
JComboBox comboBox = new JComboBox(new String[] {"None", "Help"});


public TestGui() {

    initalise();
}

private void initalise() {

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.comboBox.setSelectedItem(null);    
    this.contentPane.setLayout(new GridLayout(2,1));
    this.contentPane.add(comboBox);
    this.contentPane.add(button);

    this.button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            comboBox.removeItem(comboBox.getSelectedItem());
            comboBox.setSelectedItem(null);

        }
    });

    this.setContentPane(this.contentPane);

    this.pack();
    this.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {

            new TestGui();
        }
    });
}

}

我的程序完全按照您描述的方式运行。也许你可以找到你的问题。

答案 1 :(得分:1)

我找到了问题的解决方案,并希望与其他人分享,以防其他人遇到同样的问题。如上所述,AutoCompleteDecorator首先是造成问题的原因。如果我删除它,程序将按预期工作。但是我想为用户提供搜索功能。解决方案是使用AutoCompletion,它可以在以下链接中找到:http://www.orbital-computer.de/JComboBox/source/AutoCompletion.java。现在,在程序中,而不是使用:     AutoCompleteDecorator.decorate(employeeDeletetxt); 我用:     AutoCompletion.enable(employeeDeletetxt); 这样我允许用户使用自动完成选项,同时还能够将组合框的当前选择设置为null。

答案 2 :(得分:-1)

问题是您将当前项设置为null,这与将其设置为空字符串不同。你可以这样做:

employeeDeletetxt.setSelectedItem( “”)。

我可能会做的是创建一个方法,它有一个循环,为你的组合框创建一个字符串数组,并且第一个元素总是为空字符串。这样,一旦构建了数组,就可以添加从查询中检索到的其余元素。如果您的查询没有返回任何结果,您将只有一个空白元素的文本框。