2015-02-26 6 views
0

У меня есть класс 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 никогда не вызывается.

Итак, какой правильный метод получения значения при обновлении?

+0

Я не верю, что '' JTextField' поддерживает InputMethodListener', вы должны рассмотреть вопрос об использовании 'DocumentListener' или' InputVerifer' или 'FocusListener' – MadProgrammer

+0

Но ни один из методов в' JTextField' или 'JTextComponent' не поддерживает это слушатель. –

+0

'JTextField # getDocument', см. [Реализация фильтра документов] (http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter) – MadProgrammer

ответ

1

Используйте DocumentListener на документе JTextField «s:

textField.getDocument().addDocumentListener(...); 

Вы можете использовать его для обнаружения каких-либо изменений в тексте.