有没有更好的方式来制作我的代码?字符数组,键侦听器

时间:2019-02-20 21:13:23

标签: arrays input char keylistener

我想在键盘上按一个字母时弹出一个对话框。通过这种方式,我有了一个很长的char数组。有没有更好的方法来编写此代码?

    @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 :(得分:1)

如果您对更好的定义是更少的行,则任何单个小写字符的正则表达式将更少的代码。

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);
}

答案 1 :(得分:0)

简单起见,您可以在.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);
        }
    }