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 に答える