Я использую несколько JFormattedTextFields в моей программе. По какой-то причине, когда текстовое поле получает фокус после щелчка по текстовому полю, позиция каретки всегда переходит влево (позиция 0). Я бы хотел, чтобы каретка оказалась в том месте, где щелкнул пользователь. Поэтому, если я нажму между двумя цифрами, каретка должна оказаться между этими двумя цифрами.
Итак, я реализовал FocusListener, который получал бы местоположение щелчка и устанавливал там позицию каретки.
FocusListener focusListener = new FocusListener(){
public void focusGained(FocusEvent evt) {
JFormettedTextField jftf = (JFormattedTextField) evt.getSource();
//This is where the caret needs to be.
int dot = jftf.getCaret().getDot();
SwingUtilities.invokeLater( new Runnable() {
public void run() {
'the textField that has focus'.setCaretPosition('Some how get the evt or dot');
}
});
}
public void focusLost (FocusEvent evt) {}
});
Я пробовал несколько вещей, чтобы заставить его работать. Я попытался использовать последнее ключевое слово, которое работает, но только для одного текстового поля.
Я использовал методы set / get внутри слушателя фокуса для назначения текущего объекта, но не уверен, как сделать это «безопасным» (например, нужно ли их синхронизировать?).
Может быть, я что-то упускаю?