How to get value that has been written in editable JComboBox?

Tomáš Zato - Reinstate Monica picture Tomáš Zato - Reinstate Monica · Mar 17, 2015 · Viewed 7.8k times · Source

I keep searching and it seems like everybody is using only the JComboBox#getSelectedItem. But my combo box is editable and the user can enter anything. The getSelectedItem method returns one of the actual items in the combo box, not a string entered in the field.

image description

If my box contains "Bar" and "Item" and user enters "Foo", I want to get "Foo"!

Why getSelectedItem does not work

It was pointed out that getSelectedItem does also return the string entered. It was not pointed out though, that this only works after the user stops editing the field. I attached these event listeners:

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

And this were the results:

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

As you can see, the action event listener could capture the value, but the key event could not.

Answer

Umberto Raimondi picture Umberto Raimondi · Mar 17, 2015

This way: combobox.getEditor().getItem(). Nice drawing.