Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > problema con JFormatedTextField

Tengo un problema con JFormattedTextField. Lo utilizo para crear un formulario de una aplicación. en este formulario tengo varios JFormattedTextField cada uno con un formato. Lo que quiero es que cuando un JFormattedTextField tenga el foco el cursor se ponga al final del texto, ya sea un numero o una fecha o un string. Es decir, por ejemplo

JFT1: direccion|
JFT2: 12/10/2011|

Que el cursor siempre este al final. Ahora mismos cuando el JFormattedTextField coje el foco el cursor se pone al inicio del texto y no entiendo porque. He utilizado ya el evento FocusListener y el codigo

public void focusGained(FocusEvent e) {
if (e.getSource() instanceof JFormattedTextField) {
JFormattedTextField jf = ((JFormattedTextField)e.getSource());
if (jf.isEditValid()) {
if (((JFormattedTextField)e.getSource()).getCaret().getDot() != jf.getText().length() ) {
int lg = ((JFormattedTextField)e.getSource()).getText().length();
if (lg == 10 ){
lg = 4;
}
prueba 1 --> //((JFormattedTextField)e.getSource()).getCaret().setDot(lg);
prueba 2 --> //((JFormattedTextField)e.getSource()).getCaret().moveDot(lg);
prueba 3 --> ((JFormattedTextField)e.getSource()).setCaretPosition(lg);
}
}
}

}

pero no hace caso a ningun metodo el cursor sigue apareciendo al principio del texto y no al final....

por favor ayuda!!!!

diciembre 18, 2011 | Unregistered Commenterjogugil

solo me parece que te complicaste demasiado la vida...

jf.setCaretPosition(jf.getText().length());

si estoy equivocado, dime.

diciembre 19, 2011 | Unregistered Commenteremanuel

hola, eso es lo primero que hice.... pero no me funciona... No me modifica la posición del cursor cuando un textfield coje el foco

diciembre 20, 2011 | Unregistered Commenterjogugil

He encontrado la soulicon a este problema. No tengo muy claro el porque, pienso que el objeto JFormattedTextField modifica y actualiza el solo la posicion del cursor al visualizarse en pantalla y por eso debes modificar la posición del carent desde otro hilo. Os paso el codigo. Puedes o seleccionar el texto o modificar la posicion del cursor dentro del field:

public void focusGained(FocusEvent e) {
if (e.getSource() instanceof JFormattedTextField) {

/* After a formatted text field gains focus, it replaces its text with its
* current value, formatted appropriately of course. It does this _after_
* any focus listeners are notified. So, if we are editable, we queue
* up a selectAll to be done after the current events in the thread are done. */
final JFormattedTextField field = (JFormattedTextField) e.getSource();
if ( field.isEditable() ) {
Runnable doSelect = new Runnable() {
public void run() {
field.selectAll();
//field.setCaretPosition(field.getText().length());
}
};
SwingUtilities.invokeLater( doSelect );
}
}

}

diciembre 20, 2011 | Unregistered Commenterjogugil

Si necesitas hacer eso, creo que tu componente no se está ejecutando en el EDT.
Swing no se ejecuta en el EDT por defecto; por esa razón toda la creación de componentes de Swing, desde el JFrame principal de la aplicación, debe realizarse dentro de un invokeLater, tal y como haces en tu código.

diciembre 20, 2011 | Registered Commenterchoces

conclusión... Swing apesta

diciembre 21, 2011 | Unregistered Commenteremanuel

Conclusión... con Swing se pueden hacer aplicaciones como ésta:

http://blogs.oracle.com/geertjan/entry/industry_award_for_microchip_s

o como todas éstas:

http://platform.netbeans.org/screenshots.html

diciembre 21, 2011 | Registered Commenterchoces