2017-12-04 6 views
0

私はJFrameにJPanelを持っており、エスケープボタン用のKeyListenerを作成したいと考えています。私は既にButtonとMouseListenerにActionListenersを使用しています。 KeyListenerが機能しない理由はわかりません。そのパネルには他に何もないので、Panelに焦点を当てるべきです。私はe.getKeyCode()またはe.getKeyChar()とEscape以外のキーのいくつかの組み合わせも試みました。JPanelでエスケープするためのKeyListener

public GamePanel(GameState gameState, Window window) { 
    game = gameState; 
    myWindow = window; 
    renderer = new Renderer(); 
    setFocusable(true); 
    addMouseListener(this); 
    addKeyListener(new KeyListener() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_ESCAPE) { 
       System.out.println("escape"); 
      } 

     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void keyTyped(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    add(renderer); 
    setLayout(null); 
    setBackground(Color.CYAN); 
    setPreferredSize(new Dimension(8000, 600)); 


    timer = new Timer(20, this); 
    timer.start(); 
} 
+0

問題が解決されたことを人々が知るように、回答の横にあるチェックマークをクリックすると、回答を受け入れることを忘れないでください。他の投稿を参照してください:https://stackoverflow.com/questions/47554346/using-jbutton-in-one-class-to-change-card-in-another-class-using-cardlayout and https://stackoverflow.com/questions/47460521/how-to-make-jpanel-in-jframe-visible – camickr

+0

私は重複が好きです。 –

答えて

1

フレーム全体のエスケープキーのリスナーを登録できます。

Action action = ...; 
String name = "Escape"; // I think the exact name doesn't matter 
JComponent pnl = frame.getRootPane(); 
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); 
pnl.getActionMap().put(name, action); 
pnl.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, name); 
+0

(1+)ActionはActionListenerと同じです。詳細は、[アクションの使用方法](https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html)のSwingチュートリアルのセクションを参照してください。上記はKey Bindingsの使用例です。このチュートリアルでは、「Key Bindingsの使い方」のセクションもあります。 – camickr

+0

1+とは何ですか? –

+0

Key BindingsはKeyListenerではなく、使用するアプローチなので、私はあなたの答えを投票したことを意味します。 – camickr

関連する問題