Tengo una pequeña aplicación de escritorio Java que usa Swing. Hay un cuadro de diálogo de entrada de datos con algunos campos de entrada de diferentes tipos (JTextField, JComboBox, JSpinner, JFormattedTextField). Cuando activo JFormattedTextFields, ya sea tabulando el formulario o haciendo clic con el mouse, me gustaría seleccionar todo el texto que contiene actualmente. De esta forma, los usuarios podrían comenzar a escribir y sobrescribir los valores predeterminados.¿Cómo seleccionar todo el texto en un JFormattedTextField cuando se enfoca?
¿Cómo puedo hacer eso? Utilicé FocusListener/FocusAdapter que llama a selectAll() en JFormattedTextField, pero no selecciona nada, aunque se llama al método FocusGained() del FocusAdapter (ver ejemplo de código a continuación).
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();
}
});
¿Alguna idea? Lo curioso es que la selección de todo su texto aparentemente es el comportamiento predeterminado tanto para JTextField como para JSpinner, al menos cuando se tabula a través del formulario.
Gracias, eso es todo. Solo puedo adivinar que NumberFormatter está haciendo algo que deshace el selectAll()? –
Sí lo hace. Formatea el valor y restablece el texto. –
+1 Lo necesitaba, no podía recordar al instante cómo hacerlo yo mismo, busqué en Google e inmediatamente encontré esta respuesta. ¡Gracias! –