2011-04-26 69 views
1

我實現了所有必需的方法並添加了「實現KeyListener」並添加了addKeyListener和setFocus(true),但沒有得到任何關鍵響應。 JFrame包含我創建的畫布類。這是窗口類的構造函數。如何將關鍵字添加到JFrame子類

setBounds(0,0, width, height); 
    setIgnoreRepaint(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    add(MainCanvas.Instance()); 
    this.getContentPane().addKeyListener(this); 
    pack(); 
    setVisible(true); 

    if (thread == null) 
    { 
     thread = new Thread(this); 
    } 

    thread.start(); 
+0

如果將關鍵字偵聽器添加到MainCanvas.Instance()而不是內容窗格中,會發生什麼情況? – MeBigFatGuy 2011-04-26 02:26:15

+2

1)如果你的意思是'Canvas',則交換'JComponent'或'JPanel'。不要混用Swing和AWT(除非你知道你在做什麼,或者正在使用Java 7)。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://pscode.org/sscce.html)。 3)對'setBounds(int,int,int,int)'的調用是不可取的,並且通過對'pack()'的調用進一步向下調用。 – 2011-04-26 02:37:43

回答

1

您應該將KeyListener添加到Canvas而不是JFrame。將任何組件添加到JFrame(例如add(MainCanvas.getInstance())時,使用默認佈局(BorderLayout),組件將佔用JFrame視圖,並且所有擊鍵都將發送到Canvas而不是JFrame。嘗試將KeyListener添加到MainCanvas而不是JFrame。

+0

我試圖將它添加到畫布,但它仍然無法正常工作。在設置BufferStrategy和構造函數之後,我將它放入添加notifiy方法中。 (使用所有正確的實現)。 – Jjack 2011-04-26 10:50:42

2

只有焦點組件纔會發送關鍵事件;您需要致電致電requestFocus()

+0

並確保它的focusable屬性設置爲true,尤其是如果它是JPanel子類。 – 2011-04-26 02:54:32