2015-02-09 70 views
0

這是個問題,可能很小,但讓我失望。我一直在試圖製作一個小程序來讓我的頭部圍繞keybinds,但它給出了錯誤。Java中的鍵綁定不起作用

public static void key() { 
    //another way to use the JComonent class? 
    JComponent component; 
    Main main = new Main(); 
    JFrame frame = new JFrame(); 
    frame.getContentPane().add(main); 

    Action test = new AbstractAction() { 
     public void actionPerformed(ActionEvent e) { 
     } 
    }; 
    //"The local variable component may not have been initialized" for component 
    component.getInputMap().put(KeyStroke.getKeyStroke("A"), "test"); 
    component.getActionMap().put("test", test); 
} 

感謝您的任何幫助。

+0

你想分享你得到的錯誤嗎? – Kon 2015-02-09 06:56:35

+0

@Kon錯誤是作爲代碼中的註釋。 – Jens 2015-02-09 06:58:22

+0

必須將鍵綁定分配給附加到可顯示容器的組件。除非組件在屏幕上顯示,否則它將永遠不會收到關鍵事件 – MadProgrammer 2015-02-09 07:00:30

回答

1

你永遠不會分配一個值JComponent component;這就是爲什麼你得到的錯誤。

您可以將其更改爲JComponent component = null;並且錯誤消失。但是在運行時你會在行component.getInputMap().put(KeyStroke.getKeyStroke("A"), "test");中得到一個NPE,所以你必須爲`component'指定一個合適的值。

+0

是的,我嘗試做空,正如你所說的NPE發生。但是我分配給組件的值是什麼?感謝您的迴應 – Ky6000 2015-02-09 07:54:44

+0

這取決於你做什麼。使用'component = frame.getRootPane()' – Jens 2015-02-09 07:56:47

+0

hmm ... frame.getRootPane()不會給出任何錯誤,但是當我按下「A」時,沒有任何反應,ActionPreformed不會被調用。我正在嘗試做的事情是讓按鍵在焦點位於主框架上時在控制檯中輸出文本。 – Ky6000 2015-02-09 09:51:12