Я пытаюсь добавить FocusListener к некоторым JTextFields и JFormattedTextFields , все сделано правильно, и когда класс загружается, прослушиватель работает правильно, это простой метод выберите весь текст в TextFields, когда фокус получен, но TextField.selectAll() работает только один раз, затем, когда я фокусирую что-то еще, и возвращаю фокус в поле, он ничего не делает, но сам прослушиватель работает , я попробовал добавить System.out.println(evt.getComponent()), и он распечатывает результат, но фокус больше не выделяет весь текст...
Весь класс Frame огромен и очень специфичен, с некоторым кодом, сгенерированным IDE ¯\_(ツ)_/¯, поэтому я добавляю только два поля, которые, как я считаю, могут помочь понять, что у меня здесь есть...
tfVencimento = new javax.swing.JFormattedTextField(dateMask());
tfValorBruto = new javax.swing.JFormattedTextField(decimalMask());
tfValorBruto.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
tfValorBruto.setText("0,00");
tfValorBruto.setMargin(new java.awt.Insets(2, 4, 2, 4));
tfValorBruto.setMinimumSize(new java.awt.Dimension(70, 22));
tfValorBruto.setPreferredSize(new java.awt.Dimension(70, 22));
tfValorBruto.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
FocusGained(evt);
}
});
tfVencimento.setMargin(new java.awt.Insets(2, 4, 2, 4));
tfVencimento.setMinimumSize(new java.awt.Dimension(70, 22));
tfVencimento.setPreferredSize(new java.awt.Dimension(70, 22));
tfVencimento.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
FocusGained(evt);
}
});
private void FocusGained(java.awt.event.FocusEvent evt) {
JTextField field = (JFormattedTextField) evt.getComponent();
field.selectAll();
}
Я думал, что это может быть что-то, что переопределяет мой прослушиватель, но ничего не нашел...
Может быть, я применил прослушиватель, попробовал несколько способов и все получилось...
Если я применю к каждому полю прослушиватель с разными методами для каждого (например, код ниже), это сработает, но у меня более 10 полей, поэтому это скучно делать, и код сложно поддерживать...
tfVencimento.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
tfVencimentoFocusGained(evt);
}
});
private void tfVencimentoFocusGained(java.awt.event.FocusEvent evt) {
tfVencimento.selectAll();
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -correctly