2013-07-20 24 views
2

這裏是我的程序:我想只拿字母,退格鍵,在Java平臺上擺在文本字段中刪除和空間

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

但節目當我按下「空格」不工作。它返回if語句,而退格和刪除完美地執行。所以請幫忙解釋一下。感謝您閱讀....

+0

你似乎已經倒了'isAlphabetic()'測試這裏 – fge

+0

等待,你想,如果字符蜂鳴輸入的是_among_ alpha等,或者如果它不在其中? – fge

回答

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(); 
} 
+0

謝謝大家,我明白了。它的工作原理...再次感謝 –

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的空間。請注意早期的)

+0

謝謝,但以前的答案已經解決了我的問題,謝謝你的另一種方式。我真的很榮幸... –

相關問題