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.
If my box contains "Bar" and "Item" and user enters "Foo", I want to get "Foo"!
getSelectedItem
does not workIt 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.
This way: combobox.getEditor().getItem()
. Nice drawing.