Есть ли лучший способ сделать код, который я сделал?массив символов, списки ключей - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу сделать диалоговое окно всплывающим при нажатии буквы на клавиатуре.Таким образом, у меня получился очень длинный массив символов.Есть ли лучший способ сделать этот код?

    @Override
    public void keyPressed(KeyEvent e) {
        char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
        char c = e.getKeyChar();
        char a = alphabet[0];
        for(int i = 0; i < alphabet.length;i++) {
            a = alphabet[i];
            if(c == a)
                JOptionPane.showMessageDialog(panel, "Error: "+c, " cannot be used", JOptionPane.WARNING_MESSAGE);
        }
    }

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Проще говоря, вы можете использовать .contains() для String 'допустимых' символов.

Что-то вроде:

    private final String letters = "abcdefghijklmnopqrstuvwxyz";

    @Override
    public void keyPressed(KeyEvent e) {
        char c = e.getKeyChar();            

        // if the character entered is not the list of valid inputs, warn user 
        if( !letters.contains(Character.toString(c)) ){
            JOptionPane.showMessageDialog(panel, "Error: "+c, " cannot be used", JOptionPane.WARNING_MESSAGE);
        }
    }
0 голосов
/ 21 февраля 2019

Регулярное выражение для любого отдельного символа в нижнем регистре будет меньше кода, если ваше определение лучше меньше строк.

private String _regex = "[a-z]";
private Pattern _lowercaseCharacterPattern = Pattern.compile(_regex);

@Override
public void keyPressed(KeyEvent e) {
    char c = e.getKeyChar();
    if( _lowercaseCharacterPattern.matcher(String.valueOf(c) ).matches() )
        JOptionPane.showMessageDialog(panel, "Error: "+c, " cannot be used", JOptionPane.WARNING_MESSAGE);
}
...