2

这是我的程序:

private void nametextKeyTyped(java.awt.event.KeyEvent evt)    
{                                    
        char c = evt.getKeyChar();    
        if(!(Character.isAlphabetic(c)) || (c==KeyEvent.VK_BACK_SPACE) ||     (c==KeyEvent.VK_DELETE) ||    
                (c==KeyEvent.VK_SPACE)){  
       getToolkit().beep();  
       evt.consume();  
       }  

但是当我按“SPACE”时程序不起作用。它返回 if 语句,而退格和删除则完美执行。所以请帮忙做一个正确的解释。谢谢阅读....

4

2 回答 2

2

你的逻辑有问题:

if(!(Character.isAlphabetic(c)) || (c==KeyEvent.VK_BACK_SPACE)
    || (c==KeyEvent.VK_DELETE) || (c==KeyEvent.VK_SPACE)) {

如果字符不是字母字符,或者是退格、删除或空格,这将发出哔哔声。

建议的解决方案,前提是如果它不在上述范围内,您想发出哔声:

private void nameTextKeyTyped(final KeyEvent event)
{
    boolean doBeep = true;
    final char c = event.getKeyChar();
    switch (c) {
        case KeyEvent.VK_BACK_SPACE: 
        case KeyEvent.VK_DELETE:
        case KeyEvent.VK_SPACE:
            doBeep = false;
            break;
        default:
            doBeep = !Character.isAlphabetic(c);
            // no need to "break;": last branch of switch
    }
    if (doBeep)
        getToolkit.beep();
    event.consume();
}
于 2013-07-20T07:01:03.713 回答
2

您的代码的问题在于(

代替:

if (!(Character.isAlphabetic(c)) || (c==KeyEvent.VK_BACK_SPACE) || (c==KeyEvent.VK_DELETE) || (c==KeyEvent.VK_SPACE)){  
    getToolkit().beep();  
    evt.consume();  
 } 

改成:(仔细看括号)

if (!((Character.isAlphabetic(c)) || (c==KeyEvent.VK_BACK_SPACE) || (c==KeyEvent.VK_DELETE) || (c==KeyEvent.VK_SPACE))) {  
    getToolkit().beep();  
    evt.consume();  
 } 

!(Character.isAlphabetic(c))将为空间返回 TRUE。注意早)

于 2013-07-20T06:58:57.697 回答