如何获得在可编辑的JComboBox中编写的价值?

2022-09-03 13:42:34

我一直在搜索,似乎每个人都只使用.但是我的组合框是可编辑的,用户可以输入任何内容。该方法返回组合框中的实际项之一,而不是在字段中输入的字符串。JComboBox#getSelectedItemgetSelectedItem

image description

如果我的盒子包含“Bar”和“Item”,并且用户输入“Foo”,我想得到“Foo”!

为什么不起作用getSelectedItem

有人指出,这确实也返回了输入的字符串。但是没有指出,这仅在用户停止编辑字段后才有效。我附加了这些事件侦听器:getSelectedItem

Component[] comps = input.getComponents();
//Third is the text field component
comps[2].addKeyListener(new KeyListener() {
  public void keyTyped(KeyEvent e) {
    doSomething();
  }
});
//Also fire event after user leaves the field
input.addActionListener (new ActionListener () {
    @Override
    public void actionPerformed(ActionEvent e) {
      doSomething();
    }
});

结果是这样的:

KeyEvent:
 JComboBox.getEditor().getItem() = 6  
 JComboBox.getSelectedItem()     = null
KeyEvent:
 JComboBox.getEditor().getItem() = 66
 JComboBox.getSelectedItem()     = null
KeyEvent:
 JComboBox.getEditor().getItem() = 666
 JComboBox.getSelectedItem()     = null
ActionEvent:
 JComboBox.getEditor().getItem() = 6666
 JComboBox.getSelectedItem()     = 6666

如您所见,操作事件侦听器可以捕获值,但密钥事件不能。


答案 1

这边:。漂亮的图纸。combobox.getEditor().getItem()


答案 2

也许您使用的方式有问题。对我来说,这似乎很好:getSelectedItem

JComboBox<String> combo = new JComboBox<>(new String[] {"bar", "item"});
combo.setEditable(true);

JButton button = new JButton("Get");
button.addActionListener((ActionEvent e) -> {
    System.out.println(combo.getSelectedItem());
});

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.getContentPane().add(combo);
frame.getContentPane().add(button);
frame.pack();
frame.setVisible(true);

如果在选择其中一个预定义项目后单击该按钮,它将打印该项目,如果输入一些文本,然后按该按钮,它将打印该文本。


推荐