Olá Galera, boa tarde!!
Preciso de um help - eu quero que no meu sistema, quando o usuário atingir o máximo na caixa de texto, ele ‘pule’ para outra caixa de texto que eu definir - evitando do usuário precisar clicar ou apertar tab.
Estou usando o Swing\NetBeans.
Grato.
1 curtida
Se estiver utilizando o jTextField
basta acionar o evento KeyReleased
, verificar o tamanho da string e passar o foco para o próximo campo.
Exemplo:
private void jTextFieldExemploKeyReleased(java.awt.event.KeyEvent evt) {
avancaCampo(jTextFieldExemplo.getText(), 10, jTextFieldSecundario);
}
private void avancaCampo(String text, int limite, jTextField campoFoco) {
if (text.length() == limite) { //Quando a String atingir 10 caracteres o foco vai para o outro campo escolhido
campoFoco.grabFocus();
}
}
Jonathan, funcionou direitinho, mas agora surgiu um desafio que não estou conseguindo resolver.
Seguinte, alguns textfields podem ter 1 ou 2 letras e ai eu preciso que o limite seja 1 ou 2 - isso vai depender se o usuario digitar 1 ou 2 letras.
Você tem que implementar uma classe que faça esse trabalho pra você utilizando o PlainDocument.
Exemplo:
public class FixedLengthDocument extends PlainDocument {
private final int iMaxLength;
public FixedLengthDocument(int maxlen) {
super();
iMaxLength = maxlen;
}
@Override
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null) {
return;
}
if (iMaxLength <= 0) { // aceitara qualquer no. de caracteres
super.insertString(offset, str, attr);
return;
}
int ilen = (getLength() + str.length());
if (ilen <= iMaxLength) { // se o comprimento final for menor...
super.insertString(offset, str, attr); // ...aceita str
} else {
if (getLength() == iMaxLength) {
return; // nada a fazer
}
String newStr = str.substring(0, (iMaxLength - getLength()));
super.insertString(offset, newStr, attr);
}
}
}
Com a classe implementada basta limitar o campo no construtor da classe.
Exemplo:
jTextField.setDocument(new FixedLengthDocument(2)); //Limitará o campo em 2 caracteres