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) {
...
<обработка>
...
}
});
Каждое изменение позиции знака вставки генерирует событие 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) {
...
<установка позиции каретки>
...
}
});
Пример аналогичный предыдущему ответу, но в предыдущем примере гораздо больше возможностей по обработке ситуации.