JPanel
内にJFrame
があります。 KeyListener
を登録しました。これに基づいて、JPanel
を更新します。私が抱えている問題は、JPanel
に焦点を合わせることができないため、KeyListener
が機能しないことです。 KeyListener
に登録したので、JFrame
が機能していることはすでに知っていますが、正常に機能しました。私のコードは現時点では次のようになっています。
myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);
誰かが以前にこのような問題に遭遇したことがありますか?これに関して私が欠けているものはありますか?
追伸:JPanel
の中にコンポーネントはありません。背景に画像を描画するだけなので、JPanel自体に焦点を合わせ、その中の何かに焦点を合わせる必要はありません。
パネルがフォーカス可能であることを示していますが、パネルはフォーカスを要求していません。 myPanel.requestFocus();
を使用してみてください。
setFocusable(true)
を使用してからrequestFocusInWindow()
を使用します。ただし、後者は実行する必要がありますafterパネルを含むウィンドウが表示されるため、登録が必要になる可能性があります。ウィンドウリスナーを開き、ウィンドウでアクティブ化されたハンドラーコードでrequestFocusInWindow()
を実行します。
注:具体的には、ウィンドウの後issetVisible(true)
を呼び出した直後ではなく、表示されます。
試してみてください
panel.setFocusable(true);
panel.setRequestFocusEnabled(true);
// some code here
panel.grabFocus();
次のようなものを試してください。
myFrame.addFocusListener(new FocusAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void focusGained(FocusEvent aE) {
myPanel.requestFocusInWindow();
}
});
私は時々同様の問題に直面します。場合によっては、フレーム内にあるパネル内の特定のコントロール(たとえば、キーボード入力を行う入力ボックス)にフォーカスを設定または要求する方が、フォーカスを要求するよりも優れていることに気付きました。ペイン自体。