Foro sobre Java SE > problema con JFormatedTextField
solo me parece que te complicaste demasiado la vida...
jf.setCaretPosition(jf.getText().length());
si estoy equivocado, dime.
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
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 );
}
}
}
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.
conclusión... Swing apesta
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
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!!!!