2011-12-26 3 views
0

ユーザーがエスケープキーを押して新しいウィンドウを開いたときに、ウィンドウを閉じようとしています。なんらかの理由で、dispose()を追加すると、キーリスナーには、それは動作しません。KeyListenerはdispose()で動作しません。

これを修正する方法はありますか?

ありがとうございます!ここで

はコードです:

public class About extends JPanel implements KeyListener{ 

Font menu = new Font("SansSerif", Font.BOLD, 12); 
Font title = new Font("SansSerif", Font.BOLD, 14); 
Font version = new Font("Monospaced", Font.ITALIC, 12); 
boolean falling = false; 

public About() { 

    JFrame frame = new JFrame("Tiny Runner"); 
    frame.add(this); 
    frame.setBounds(0, 0, 800, 600); 
    frame.addKeyListener(this); 
    frame.setFocusable(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.setVisible(true); 
    } 
public void keyPressed(KeyEvent keyEvent) { 
    if (keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) { 
      new MainMenu(); 
      dispose(); 
    } 
} 
+1

については、Windowクラスから継承しないため、disposeメソッドはありません。つまり、フレーム変数でdisposeを呼び出さなければなりません。 – Dunes

答えて

3

あなたは、このためのKeyListenerを使用してはいけません。

代わりに、キーバインディングを使用する必要があります。バインディングをルートペインに追加する必要があります。詳細については、Key Bindingsを参照してください。バインディングはルートペインに追加されるので、フレームを作成するときにこれを実行して、フレームにアクセスできるようにする必要があります。

0

あなたはdisposeを呼び出すときに何をすべきか知っていますか?何を処分すべきか?

フレームをクラス変数にしてから、disposeをframe.dispose()のように呼び出す必要があります。