захват ввода из JTextInput, когда пользователь не нажимает Enter - PullRequest
0 голосов
/ 08 сентября 2010

В моем приложении Swing у меня есть экран с кучей JTextFields.Каждый JTextField использует метод actionPerformed ActionListener для копирования введенного пользователем текста в мой объект модели данных.

Этот метод, кажется, вызывается только в том случае, если пользователь нажимает Enter .Как я могу скопировать введенный пользователем текст в мой объект модели данных, если пользователь не нажимает Ввод , а вместо этого 1) вкладки между полями или 2) использует мышь для перехода от одного поля к следующему?

Ответы [ 3 ]

1 голос
/ 08 сентября 2010

Если вы хотите выполнить действие только тогда, когда пользователь отходит от поля (не для каждого символа, изменяющегося в поле), то прослушайте события фокуса:

JTextField textField = ...
textField.addFocusListener(new FocusAdapter(){ void focusLost(FocusEvent e) 
  { doSomething(); } );

Возможно, вы захотитевзгляните на JFormattedTextField , который обрабатывает такие вещи для вас.

1 голос
/ 08 сентября 2010

muJTextField.addFocusListener(/* focus listener here */); для изменения фокуса

myJTextField.getDocument().addDocumentListener(/* document listener here */); для изменений документа

Для изменений документа используйте changeUpdate()

0 голосов
/ 08 сентября 2010

проблема с щелчком мыши в том, что компонент, на который вы щелкаете, должен захватывать фокус, иначе потерянный фокус не будет вызван ... У меня была та же проблема, поэтому я использовал таймер для фиксации своего кода каждые x миллисекунд ... если вы уверены, что потерянный фокус будет вызываться при нажатии на какой-либо другой компонент, простой слушатель фокуса сделает свое дело ...

...