Olá. Eu preciso validar o que o user digita na coluna 0 da minha jtable. O valor de digitado só pode ser uma unica letra e deve ser maiuscula.
Adicionei um listener mas ele não valida na hora que o dado foi inserido, o que eu pude perceber é que se uma dada celula recebeu um dado qualqer ela aceita e se eu saio dessa celula e volto nela
ai sim o médoto validador é acionado. O que não serve, ele teria que validar assim que o user terminasse de digitar ou saisse da célula.
jtable = new JTable(linhas,colunas);
for(int i=0;i<jtable.getRowCount();i++)
for(int j=0;j<jtable.getColumnCount();j++)
jtable.setValueAt("", i, j);
jtable.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e) {
Validador valida = new Validador();
boolean pode;
//analise dos estados
if(jtable.getSelectedColumn() == 0 && jtable.getSelectedRow() > 0){
String r = valida.verificaEstado(jtable.getValueAt(jtable.getSelectedRow(),jtable.getSelectedColumn()).toString());
if(r.length()>1 && (!r.equals("none")))
JOptionPane.showMessageDialog(null, r);
else
if(!r.equals("none"))
jtable.setValueAt(r.toUpperCase(Locale.ENGLISH), jtable.getSelectedRow(),jtable.getSelectedColumn() );
}
}
}
);
método validador
public String verificaEstado(String simbolo){
/* Pattern p = Pattern.compile("\\^W");
Matcher m = p.matcher(simbolo);*/
String retorno = "";
if(simbolo.equals(""))
retorno = "none";
else{
if(simbolo.length()>1)
retorno = "Por favor digite apenas um caracter";
else{
Character ch = simbolo.toUpperCase().charAt(0);
if(!Character.isLetter(ch))
retorno ="Por favor digite uma letra";
else{ // aqui sabe-se que é letra
if(jaPossuiEstado(ch))
retorno = "Por favor digite outro estado, este já existe!";
else
retorno = simbolo.toUpperCase();
}
}
}
return retorno;
}
obrigado!