Java « JTextField и VK ENTER

Проблема такая: При фокусе на JTextField и нажатии клавиши Enter (возврат каретки), как и полагалось каретка не возвращается к началу поля, однако метод field.getCaret().getMagicCaretPosition() возвращяет (0,0), будто каретка все-таки вернулась. Вопрос: Как зафильтровать клавишу Enter и не дать полю реагировать на нее как на клавишу возврата каретки, чтобы в итоге и визуально и программно каретка осталась на месте.

1 ответов


Не поверите, но решил проблему с помощью Robot )
вот так -


try {
                    Robot bot = new Robot();
                    bot.keyPress(KeyEvent.VK_RIGHT);                  
                } catch (AWTException ex) {
                    log.severe(ex.getMessage());
                }
 

получается курсор "возвращается" на свое место.

javax.swing.JTextField наследует от javax.swing.text.JTextComponent механизм CaretListener:

Каждое изменение позиции знака вставки генерирует событие CaretEvent. Эти события можно прослушивать реализовав интерфейс CaretListener.

CaretListener определяет только один метод:
void caretUpdate(CaretEvent ce)

Соответственно, любой перехват можно организовать через этот метод, а точнее Вам просто нужно заново позиционировать каретку с помощью setCaretPosition.

Пример:

...
JTextField textField;
...
textField = new JTextField(255);
...
textField.addCaretListener( new CaretListener() {
   public void caretUpdate (CaretEvent ce) {
       ...
       <обработка>
       ...
   }
});
 

Кроме того, когда нажимается Enter генерируется событие ActionEvent, которое можно обработать через реализацию интерфейса ActionListener.

Для создания такой реализации необходимо переопределить:


 void actionPerfomed(ActionEvent ae)
 
Пример:

...
JTextField textField;
...
textField = new JTextField(255);
...
textField.addActionListener( new ActionListener() {
   public void actionPerfomed (ActionEvent ce) {
       ...
       <установка позиции каретки>
       ...
   }
});
 
Пример аналогичный предыдущему ответу, но в предыдущем примере гораздо больше возможностей по обработке ситуации.