Galera,
Como fica o código para tratar num textbox que o digitado não pode ser menor que 10 caracteres.
Obrigado.
Quando o campo perder o foco você faz uma verificação para ver se o tamanho dele é menor que dez, exibe um alerta e retorna o foco ao campo em questão!
Uma forma legal de vc tratar isso é usar um objeto InputVerifier.
Vc cria uma classe que extenda de InputVerifier. Como o método verify(JComponent) desta classe é abstrato, vc é obrigado a implementá-lo. Neste método é que vc vai fazer a sua validação: se o texto do JComponent passado para o método tiver menos de 10 caracteres, vc manda ele retornar false, caso contrário, vc faz ele retornar true.
Segundo um tutorial da Sun, não é aconselhavel fazer com que esse método realize ações, tipo alterar o valor de algum campo em uma tela, etc.
Caso vc queira fazer isso, vc pode sobrescrever o método shouldYeldFocus(JComponent). A implementação deste método, dada pela classe InputVerifier simplesmente retorna o valor de verify(JComponent). Vc pode sobrescrever o should… para, por exemplo, receber em uma variável booleana o valor de retorno do verify… e, caso ele seja false, enviar uma pop-up pro usuário com alguma mensagem explicativa.
A classe JTextField tem um método public void setInputVerifier(InputVerifier). Quando usamos este método para associar ao JTextField um InputVerifier, a caixa de texto, quando ela vai perder o foco, ela invoca o método shouldYeldFocus(JComponent) do [i]InputVerifier[i] que vc associou. Esta chamada é feita internamente, e o JTextField passa ele próprio como parâmetro pro método should…. Se este método retornar true, beleza, tudo normal, mas se retornar false, o JTextField cancela a mudança de foco.
Vou passar aqui um exemplo bem tosco, que só permite que sejam entrados no campo “Código” valores numéricos e com no mínimo 10 caracteres.
package customJTextField;
import java.awt.Container;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class CustomJTextField extends JFrame {
private JTextField
TEXTO1,
txtNome
;
public CustomJTextField() {
instanciateComponents();
configGUI();
}
private void instanciateComponents() {
TEXTO1 = new JTextField();
TEXTO1.setBounds(0, 21, 115, 20);
TEXTO1.setInputVerifier(new MyVerifier());
txtNome = new JTextField();
txtNome.setBounds(0, 71, 115, 20);
}
private void configGUI() {
Container c = getContentPane();
c.setLayout(null);
JLabel lblCodigo = new JLabel("Código");
lblCodigo.setBounds(0, 0, 150, 20);
c.add(lblCodigo);
c.add(TEXTO1);
JLabel lblNome = new JLabel("Nome");
lblNome.setBounds(0, 50, 150, 20);
c.add(lblNome);
c.add(txtNome);
setBounds((800-110)/2, (600-130)/2, 110, 130);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
(new CustomJTextField()).show();
}
private class MyVerifier extends InputVerifier {
private boolean allowLostOfFocus = false;
private StringBuffer errorCauses = null;
/*
* Método implementado de InputVerifier
*/
public boolean verify(JComponent input) {
errorCauses = new StringBuffer("");
if(!(input instanceof JTextField)) {
errorCauses.append(
"Um objeto MyVerifier só deve ser " +
"associado a componentes do tipo JTextField"
);
return false;
}
JTextField txt = (JTextField)input;
if(txt.getText().length() < 10) {
errorCauses.append("- O código deve ter no mínimo 10 digitos.");
}
try {
Long.parseLong(txt.getText());
}catch(NumberFormatException e) {
errorCauses.append(errorCauses.length() == 0 ? "- " : "\n- ");
errorCauses.append("O código deve ter apenas numeros.");
}
return errorCauses.length() == 0;
}
/*
* Método sobrescrito de InputVerifier
*/
public boolean shouldYieldFocus(JComponent input) {
if(allowLostOfFocus)
return true;
if(verify(input))
return true;
/*
* Trate aqui a entrada inválida da forma que lhe for mais
* conveniente
*/
allowLostOfFocus = true;
JOptionPane.showMessageDialog(
input.getParent(),
errorCauses,
"Erro",
JOptionPane.ERROR_MESSAGE);
allowLostOfFocus = false;
return false;
}
}
}
Qualquer dúvida sobre o código, pode perguntar, ok!
tiago a sua ídeia é boa, mas como faço isso.
o campo seria um alfanumérico.