JFrame 的 KeyListener 無回應:使用 KeyEventDispatcher
您遇到 KeyListener 沒有回應,因為焦點可能不在 JFrame 上。要解決這個問題,請考慮在 KeyboardFocusManager 中新增一個單獨的 KeyEventDispatcher。
在以下程式碼範例中,定義了一個MyDispatcher 類別並將其新增至KeyboardFocusManager:
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
此調度程式處理所有按鍵無論元件焦點如何,事件都會將訊息列印到控制台。這種方法可以確保即使焦點不直接位於 JFrame 上,您的 KeyListener 也能接收鍵盤輸入。
以上是為什麼我的 JFrame 中的 KeyListener 沒有回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!