2012-01-13 76 views
3

我使用,我設置爲FullScreenWindow,像這樣的代碼一個JFrame對象上的KeyListener:搖擺鍵盤沒有響應

class Game{ 

private GraphicsDevice device; 
... 

public void run(){ 
JFrame frame = new JFrame(); 
frame.addKeyListener(new MarioKeyListener()); 
device.setFullScreenWindow(frame); 
} 

... 
} 

如果我只是在我的主要方法創建一個遊戲對象,它工作正常並調用run()。 但是我想在MouseAdapter的mousePressed()函數內部執行此操作,該函數添加到另一個JFrame的MenuItem中。結果是程序正常運行,但不接受任何鍵盤輸入。

JMenu gamemenu = new JMenu("Game"); 
    JMenuItem newGame = new JMenuItem("New Game"); 
    newGame.addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent e){ 
    Game g = new Game(); 
    g.run();  
    }    
}); 
gamemenu.add(newGame); 

我覺得我的框架對象是沒有焦點,但調用setFocusable(真)和requestfocusinwindow()沒有幫助。 如果有人知道什麼是錯或如何解決這個問題,幫助將不勝感激...

托米

+5

您通常應該避免使用KeyListeners,而是使用Key Bindings。 Swing教程將告訴你如何使用這些,並會告訴你爲什麼他們更好。 – 2012-01-13 23:29:37

+0

是的,我在這個網站上看過很多次,這就是我如果找不到更快的解決方案要做的事情。 – Tomi 2012-01-13 23:44:15

+0

無論如何,感謝您的回覆 – Tomi 2012-01-13 23:44:31

回答

4

requestFocusInWindow() ..

請求此Component獲得輸入焦點,如果這組件的頂級祖先已經是焦點窗口。

你檢查返回值?我懷疑它是失敗的,因爲在調用該方法時新窗口不是焦點組件。

如果是這種情況,可以找到類似於dialog focus戰略中添加RequestFocusListener的組合。

+0

我必須使用JFrame這是一個頂級容器,因此不是一個JComponent ...我想要做的是設置一個新的JFrame獲取鍵盤焦點。 – Tomi 2012-01-14 09:58:04

+0

感謝回覆的方式... – Tomi 2012-01-14 10:04:42

+0

下面是源文件的下載鏈接:https://www.rapidshare.com/#!download|165|852289592|mario_keylistener_problem.rar|389 – Tomi 2012-01-14 12:48:55