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”开头的单词。对不起,我不熟悉自动完成计算器。谢谢你的帮助。这是非常有用的。至少现在我知道问题出在哪里了。