Escrever somente determinadas letras num JTextField

Srs, bom dia.

Fiz um método que tem 2 JtextFields (txttomatual e txtnovotom) e nele só posso escrever as strings A,B,C,D,E,F,G e A#,C#, D#,F#, G#. pelo meu pouco conhecimento na linguagem Java, fiz meu código com Case, poderiam passar um código mais limpo, menor e funcional ? Ficaria muito grato.

Abaixo segue a maneira que encontrei para realizar o código;

Conforme podem ver, usei dois SWITCH para cada JTextField, pela minha falta de conhecimento para programar somente um case para 2 JTextFields, mas foi o que consegui fazer, sei que não é o certo, pelo menos, a minha lógica funcionou e o programa, esta rodando sem erro. No final digo que não é permitido colocar uma String (letra) igual nos dois JTextFields, faltou verificar se um dos JTextFields não estão em branco, que também é uma operação invalida.

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // Cliquei no botão alterar
      switch (txttomatual.getText()){            // Usei este case para o primeiro JTextField
        case "A":    case "B":  case "C":  case "D":  case "E": case "F": case "G":  case "A#": case "C#":  
        case "D#":  case "F#": case "G#":     
             JOptionPane.showMessageDialog(null, "Passei por aqui, funcionou ! ! !");
            break;
        default:
        JOptionPane.showMessageDialog(null, "Tom Atual, só aceita A,B,C,D,E,F,G ou  
        A#,C#,D#,E,F#,G#");   
      }
 //=======================================================================      
     switch (txtnovotom.getText()){               //Usei este case para o segundo JTextField 
        case "A":    case "B":  case "C":  case "D":  case "E": case "F": case "G":  case "A#": case "C#":  
        case "D#":  case "F#": case "G#":     
             JOptionPane.showMessageDialog(null, "Passei por aqu");
            break;
        default:
            JOptionPane.showMessageDialog(null, "Novo tom, só aceita A,B,C,D,E,F,G e  
            A#,B#,C#,D#,E,F#,G#");   
    }

//=========================================================================
if ((txttomatual.getText() .equals (txtnovotom.getText()))) {
JOptionPane.showMessageDialog(null, "Tom atual e Novo tom, não podem ser iguais ");
}else{
JOptionPane.showMessageDialog(null, "É diferente ");
}
}

Obrigado,

Armando

Veja sobre regex.

1 - Tutorial da Oracle: Regular Expressions;

2 - Documentação do Java: Regex Pattern.

Amigo, boa tarde,

Dei uma olhada no documento e no tutorial que vc mandou, embora eu não tenho problema com o Inglês (estudei 7 anos) e na dúvida peço ajuda ao Google, nosso “Pai Nosso de cada dia”, confesso que até aprendi algo, mas não sei aplicar essas classe de caracteres, classe simples, Negação, Range, União, subtração em meu método já criado, a culpa é toda minha, obrigado pela dica, vou estudar mais o tutorial e ver se sai alguma coisa, Vlw !!!

Armando

Dê uma olhada neste tópico.

1 curtida

Ok, vou estudar o código, fazer as modificações e ver se da certo.

Muito obrigado.