我使用以下代码创建了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}}
如何将文字设置为空?
答案 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( “”)。
我可能会做的是创建一个方法,它有一个循环,为你的组合框创建一个字符串数组,并且第一个元素总是为空字符串。这样,一旦构建了数组,就可以添加从查询中检索到的其余元素。如果您的查询没有返回任何结果,您将只有一个空白元素的文本框。