У меня есть класс Settings
, который должен предоставить интерфейс для извлечения настроек и сохранения их в файл. Мои настройки должны обновляться всякий раз, когда я меняю входные значения (а не после нажатия кнопки «Сохранить»). Именно поэтому я добавил этот метод Settings
класса:Событие триггера при вводе в JTextComponent java
/** Automatically update setting value as user types.
* @param setting_name What is the name of associated setting?
* @param input JTextComponent (like JTextField) to listen on for events
*/
public void listenOnInput(final String setting_name, final JTextComponent input) {
//Debug output
System.out.println("Settings[\""+setting_name+"\"] automatically updates on input change.");
input.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event) {
//Set setting to current value
setSetting(setting_name, input.getText());
}
//This method is dummy, I see no use for it
@Override
public void caretPositionChanged(InputMethodEvent event) {}
});
}
Это, вероятно, не идеальный дизайн, но мое приложение никогда не будет иметь сложные настройки поэтому я не ставлю так много усилий в решении этой задачи. Я использую это так:
JTextField name = new JTextField();
Settings settings = new Settings();
name.setToolTipText("Enter your name");
contentPane.add(name);
settings.listenOnInput("user_name", name);
Моя проблема заключается в том, что приведенный выше код не работает - я могу напечатать или нажать Enter но inputMethodTextChanged
никогда не вызывается.
Итак, какой правильный метод получения значения при обновлении?
Я не верю, что '' JTextField' поддерживает InputMethodListener', вы должны рассмотреть вопрос об использовании 'DocumentListener' или' InputVerifer' или 'FocusListener' – MadProgrammer
Но ни один из методов в' JTextField' или 'JTextComponent' не поддерживает это слушатель. –
'JTextField # getDocument', см. [Реализация фильтра документов] (http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter) – MadProgrammer