Ars*_*sen 8 java swing jcombobox
我有可编辑,JComboBox
并希望从输入中添加值,当我输入内容JComboBox
并按回车时我希望该文本出现在JComboBox
列表中:
public class Program extends JFrame
implements ActionListener {
private JComboBox box;
public static void main(String[] args) {
new Program().setVisible(true);
}
public Program() {
super("Text DEMO");
setSize(300, 300);
setLayout(new FlowLayout());
Container cont = getContentPane();
box = new JComboBox(new String[] { "First", "Second", "..." });
box.setEditable(true);
box.addActionListener(this);
cont.add(box);
}
@Override
public void actionPerformed(ActionEvent e) {
box.removeActionListener(this);
box.insertItemAt(box.getSelectedItem(), 0);
box.addActionListener(this);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我按下输入时,插入了两个值而不是一个.
为什么?
veh*_*ehk 16
从API为JComboBox
:
选择完成后,ActionListener将收到一个ActionEvent.如果组合框是可编辑的,则在编辑停止时将触发ActionEvent.
因此,你ActionListener
被召唤两次.
要仅将项目添加到JComboBox
编辑时,您可以检查以下内容ActionCommand
:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("comboBoxEdited")) {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
编辑( - >事件派发线程)
正如trashgod已经提到的,您还应该只在事件派发线程中创建和显示您的框架:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Program().setVisible(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)