Java - problema con JFormattedTextField y cursor

 
Vista:

problema con JFormattedTextField y cursor

Publicado por jogugil (3 intervenciones) el 18/12/2011 18:46:43
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!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

problema con JFormattedTextField y cursor

Publicado por jogugil (3 intervenciones) el 20/12/2011 11:21:46
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 );
}
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar