ホームページ >Java >&#&チュートリアル >KeyListeners が JPanel で動作しないのはなぜですか?
JPanel で KeyListeners が応答しない: 一般的な問題
KeyListeners を使用して JPanel 内でキーストロークを検出する場合、開発者はしばしば問題に遭遇します。リスナーは必要なアクションをトリガーできません。この問題は、いくつかの要因から発生する可能性があります。
フォーカスされたコンポーネントの制約
KeyListeners が正しく機能するためには、フォーカスされたコンポーネントに自身をアタッチする必要があります。デフォルトでは、フォーカスは JPanel に自動的に付与されません。この問題を解決するには、フォーカス可能性を明示的に設定し、JPanel のコンストラクター内でフォーカスを要求します。
<code class="java">public JPanel extends JPanel implements KeyListener { public JPanel() { this.addKeyListener(this); this.setFocusable(true); this.requestFocusInWindow(); }</code>
代替: キー バインディング
フォーカスを手動で設定するのは、実行可能な解決策として、より堅牢なアプローチはキー バインディングを利用することです。キー バインドは、キーストロークを特定のアクションに関連付けるための柔軟なメカニズムを提供します。 JPanel でキー バインドを実装するには:
<code class="java">public JPanel extends JPanel implements ActionListener { public JPanel() { setupKeyBinding(); this.setFocusable(true); this.requestFocusInWindow(); } private void setupKeyBinding() { int condition = JComponent.WHEN_IN_FOCUSED_WINDOW; InputMap inMap = getInputMap(condition); ActionMap actMap = getActionMap(); inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left"); actMap.put("Left", new leftAction()); } private class leftAction extends AbstractAction { public void actionPerformed(ActionEvent e) { System.out.println("test"); } } }</code>
この例では、leftAction クラスは、左矢印キーが押されたときに実行されるアクションを定義します (この場合、コンソールに「test」を出力します)。 .
以上がKeyListeners が JPanel で動作しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。