2013-06-02 105 views
-1

我已經在NetBeans中編寫了一個計算器,它的功能完美無缺。但是,我必須實際點擊按鈕才能插入數字,並試圖用KeyListener進行補救。我將所有數字和功能按鈕設置在JPanel命名按鈕中。我在一個名爲display的JPanel中有我的顯示標籤。在NetBeans中爲計算器使用KeyListener

我將我的類設置爲實現KeyListener,並插入KeyPressed,-Typed和-Released方法;但是我從那裏堅持下來。我不確定如何讓我的按鈕實際上監聽KeyPressed事件,以及何時聽到事件 - 激活按鈕。另外,我的按鈕以其編號命名(例如,零按鈕被命名爲零,一個按鈕是一個等等)。我讀過,你實際上必須實現一個KeyListener的地方通過使用:something.addKeyListener(something); 但我似乎無法弄清楚這一點。

我可以在這裏得到一些幫助嗎?我是Java新手,這是我的第一個獨立項目。如果我沒有提供足夠的信息,請告訴我。

編輯:我的代碼大部分是NetBeans生成的,我不能編輯組件的初始化,這似乎是我的問題,我想?

我的類聲明:

public class Calculator extends javax.swing.JFrame implements KeyListener { 
//Creates new form Calculator 
public Calculator() { 
    initComponents(); 
} 

我的一個buttonPressed動作(所有相同與實際數量的變化):

private void zeroActionPerformed(java.awt.event.ActionEvent evt) {          
    if (display.getText().length() >= 16) 
    { 
     JOptionPane.showMessageDialog(null, "Cannot Handle > 16 digits"); 
     return; 
    } 
    else if (display.getText().equals("0")) 
    { 
     return; 
    } 
    display.setText(display.getText().concat("0")); 
通過NetBeans的供應

主要方法:

public static void main(String args[]) { 
    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Calculator().setVisible(true); 
     } 
    }); 
} 

生成的initComponents()netbeans是絕對龐大的(大約500行代碼),而且我可以不編輯任何它。讓我知道我是否可以提供更多有用的信息。

+0

你可以發佈你的代碼嗎? –

+0

你有沒有完成任何教程?這裏有一個:http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html –

+0

我張貼了一些代碼。我已經關注了4個不同的教程,其中包括您列出的教程。我似乎無法弄清楚。他們正在JComponent上創建一個新的KeyListener,但我似乎無法做到這一點。 – Nick

回答

1

我不知道我完全理解你的問題,有些代碼會有所幫助,但我會採取一些措施,因爲這聽起來像是我過去常常遇到的問題。

這聽起來像你的按鍵沒有被識別的原因是焦點在按鈕之一。如果你將按鍵添加到按鈕上,那麼你不應該有任何問題。 在netbeans中,您可以非常輕鬆地通過設計屏幕添加鍵盤定位器。 這是一張圖片,展示瞭如何將一個keyPressed偵聽器添加到jPanel中的一個按鈕中。

enter image description here

private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {          
    //Check which key is pressed 
    //do whatever you need to do with the keypressed information 
}  

我很高興能自己寫出來的聽衆,但如果你剛開始學習,那麼它也是好的,得到儘可能多的幫助可能。 這可能不是最好的解決方案,因爲您必須爲每個按鈕添加偵聽器。

+0

好吧,我實現了這一點,並試圖簡單地將KeyCode打印到控制檯,以測試它是否有效,但它沒有。 System.out.println(「Code:」evt.getKeyCode()); 會不會有焦點問題,如果有的話,我該如何解決這個問題? – Nick

+0

我不完全確定,儘管剛剛寫的代碼缺少'+'符號。 – Move127

+0

好的,我正在取得進展。當我運行我的應用程序時,我注意到我的7鍵有一個藍色的邊框,我認爲這意味着它的焦點 - 確實如此。但是,如果這是唯一具有焦點的按鈕,那麼這是唯一能夠檢測到keyPressed的按鈕,並且如果我按另一個按鈕,則焦點會轉移。所以將重點放在容器上是對的,對嗎?如果是這樣,我該怎麼做? – Nick

4

難道有焦點問題嗎?如果有的話,我該如何解決這個問題?

是的,有可能是焦點問題。這就是爲什麼你不應該使用KeyListener。

Swing設計用於鍵綁定。那就是你創建一個可以做你想要的動作。然後這個動作可以被添加到你的JButton。它也可以綁定到KeyStroke。所以你有很好的可重用代碼。

閱讀有關How to Use Key Bindings的Swing教程以獲取更多信息。關鍵綁定沒有您目前的焦點問題。

+1

馬+水:P – MadProgrammer