Ich habe eine kleine Java-Desktop-App, die Swing verwendet. Es gibt einen Dateneingabe-Dialog mit einigen Eingabefeldern unterschiedlicher Typen (JTextField, JComboBox, JSpinner, JFormattedTextField). Wenn ich die JFormattedTextFields entweder durch Tabulatoren durch das Formular oder durch Klicken mit der Maus aktiviere, möchte ich, dass es den gesamten Text auswählt, den es gerade enthält. Auf diese Weise könnten Benutzer einfach mit der Eingabe beginnen und die Standardwerte überschreiben.Wie wird der gesamte Text in einem JFormattedTextField ausgewählt, wenn er den Fokus erhält?
Wie kann ich das tun? Ich habe einen FocusListener/FocusAdapter verwendet, der selectAll() auf dem JFormattedTextField aufruft, aber nichts auswählt, obwohl die focusGained() -Methode des FocusAdapters aufgerufen wird (siehe Codebeispiel unten).
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();
}
});
Irgendwelche Ideen? Das Lustige ist, dass die Auswahl des gesamten Textes anscheinend das Standardverhalten für JTextField und JSpinner ist, zumindest wenn man das Formular durchsucht.
Danke, das ist es. Ich kann nur vermuten, dass der NumberFormatter etwas tut, das die selectAll() rückgängig macht? –
Ja, tut es. Es formatiert den Wert und setzt den Text zurück. –
+1 Benötigte dies, konnte mich nicht sofort daran erinnern, wie ich das selbst machen konnte, googelte und fand sofort diese Antwort. Vielen Dank! –