Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JComboBox中的文本显示一个字符串,但所选内容实际上设置为null_Java_Jcombobox - Fatal编程技术网

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

Java JComboBox中的文本显示一个字符串,但所选内容实际上设置为null,java,jcombobox,Java,Jcombobox,我用以下代码创建了一个JComboBox: employeeDeletetxt = new JComboBox(buildComboBoxmodel("SELECT employee_id, employee_first_name FROM employees")); employeeDeletetxt.setSelectedItem(null); employeeDeletetxt.removeItem(employeeDeletetxt.getSelectedItem());

我用以下代码创建了一个
JComboBox

employeeDeletetxt = new JComboBox(buildComboBoxmodel("SELECT employee_id, employee_first_name     FROM employees"));
employeeDeletetxt.setSelectedItem(null);
employeeDeletetxt.removeItem(employeeDeletetxt.getSelectedItem());                      
employeeDeletetxt.setSelectedItem(null); 
现在,当我运行程序时,选择设置为
null
,因此组合框中不显示任何内容。我有一个用于删除按钮的
ActionListener
ActionListener
将删除某些记录,当这种情况发生时,我需要
JComboBox
中的数据来反映最近的更改。我使用以下代码:

employeeDeletetxt = new JComboBox(buildComboBoxmodel("SELECT employee_id, employee_first_name     FROM employees"));
employeeDeletetxt.setSelectedItem(null);
employeeDeletetxt.removeItem(employeeDeletetxt.getSelectedItem());                      
employeeDeletetxt.setSelectedItem(null); 
问题在于调用这些行后,
JComboBox
中显示的文本不是空的。但是,
JComboBox
指向的项目实际上是
null
,因为我在上一次调用
ActionListener
后直接调用它时,会收到以下错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

如何将文本设置为空?

问题是您将当前项设置为空,这与将其设置为空字符串不同。您可以执行以下操作:

EmployeeDeleteText.setSelectedItem(“”)


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

我试图实现您所描述的内容,并实现了以下目标:

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();
        }
    });
}

}

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

我找到了问题的解决方案,希望与大家分享,以防其他人也有同样的问题。正如我上面所说的,自动完成除颤器是问题的根源。如果我删除了它,那么程序将按预期工作。然而,我想为用户提供搜索的能力。解决方案是使用自动完成,该功能可在以下链接中找到:。现在,在程序中,不要使用: 自动完成装饰(EmployeeDeleteText); 我使用: 自动完成。启用(EmployeeDeleteText);
通过这种方式,我允许用户使用自动完成选项,同时还能够将组合框的当前选择设置为null。

如中所述,参数设置为
setSelectedItem(Object anObject)
:要选择的列表对象;使用null清除选择。我认为问题在于这个组合框的上下文。我写了一个小测试来模拟这个问题,但无法重现您的问题。设置SelectEdItem(null)后,我的组合框文本被清除(可编辑为false或true)。你应该提供更多的源代码。我发现了问题。我使用以下行允许用户搜索条目:
AutoCompleteDecorator.decoration(employeedeletext2)这就是导致异常行为的原因。一旦我删除这条线,一切工作。有什么方法可以让我保持这条线并解决问题吗?我认为你不需要自动完成的除颤器。JComboBox有机会根据您的输入选择条目。因此,在上面的示例中,如果选择了JComboBox并按下“h”,则选择“Help”条目。对于什么功能,您需要自动完成计算器?在某些情况下,我的程序中JComboBox中有100多个条目,我需要为用户提供键入前几个字符的能力,以便他/她将搜索范围缩小到几个条目。这就是我使用自动完成计算器的原因。如果可能,我希望保留此功能。为什么不对数组进行排序?剩下的应该可以通过标准JComboBox实现。例如,如果字符串以“s”开头,我可以按“s”几次,然后迭代所有以“s”开头的单词。对不起,我不熟悉自动完成计算器。谢谢你的帮助。这是非常有用的。至少现在我知道问题出在哪里了。