No se puede establecer una selección en un JTextField después de un NavigationFilter

Logré seleccionar mi JTextField así:

jtfNumTag.setSelectionStart(0);
jtfNumTag.setSelectionEnd(iMaxLenght);

pero cuando agregué un NavigationFilter en mi JTextField, la selección no funcionó. Podría entender si mi NavigationFilter impidió que se hiciera la selección, pero no veo por qué haría eso.

final int iMaxLenght = szValues[0].length();
NavigationFilter filter = new NavigationFilter() {
    public void setDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) {
        if (dot >= iMaxLenght) {
            fb.setDot(iMaxLenght, bias);
        } else {
            fb.setDot(dot, bias);
        }
     }
    public void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) {
        if (dot >= iMaxLenght) {
            fb.setDot(iMaxLenght, bias);
        } else {
            fb.setDot(dot, bias);
        }
    }
};
jtfNumTag.setNavigationFilter(filter);

jtfNumTag.setSelectionStart(0);
jtfNumTag.setSelectionEnd(iMaxLenght);

Gracias de antemano por explicarme lo que no entendí.

preguntado el 03 de mayo de 12 a las 22:05

1 Respuestas

En lugar de fb.setDot, probablemente deberías llamar fb.moveDot() in NavigationFilter.moveDot implementación. De lo contrario, el símbolo de intercalación no se moverá en absoluto. Por ejemplo:

public void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) {
    if (dot >= iMaxLenght) {
        fb.moveDot(iMaxLenght, bias);
    } else {
        fb.moveDot(dot, bias);
    }
}

contestado el 03 de mayo de 12 a las 23:05

De hecho moveDot fue inútil. Funcionó sin este método. Pero tus cambios también funcionan. ¡Gracias! - M07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.