У меня есть небольшое настольное приложение для Java, которое использует Swing. Существует диалог ввода данных с некоторыми полями ввода разных типов (JTextField, JComboBox, JSpinner, JFormattedTextField). Когда я активирую JFormattedTextFields либо путем табуляции по форме, либо путем щелчка мышью, я бы хотел, чтобы он отобразил весь текст, который он в настоящее время содержит. Таким образом, пользователи могут просто начать вводить и перезаписывать значения по умолчанию.
Как я могу это сделать? Я использовал FocusListener/FocusAdapter, который вызывает selectAll() на JFormattedTextField, но он ничего не выбирает, хотя вызван метод focusAction Focus() (см. Пример кода ниже).
private javax.swing.JFormattedTextField pricePerLiter;
// ...
pricePerLiter.setFormatterFactory(
new JFormattedTextField.AbstractFormatterFactory() {
private NumberFormatter formatter = null;
public JFormattedTextField.AbstractFormatter
getFormatter(JFormattedTextField jft) {
if (formatter == null) {
formatter = new NumberFormatter(new DecimalFormat("#0.000"));
formatter.setValueClass(Double.class);
}
return formatter;
}
});
// ...
pricePerLiter.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
pricePerLiter.selectAll();
}
});
Любые идеи? Самое смешное в том, что выбор всего его текста, по-видимому, является поведением по умолчанию для JTextField и JSpinner, по крайней мере, при табуляции через форму.