web-dev-qa-db-ja.com

JPanelに焦点を当てる

JPanel内にJFrameがあります。 KeyListenerを登録しました。これに基づいて、JPanelを更新します。私が抱えている問題は、JPanelに焦点を合わせることができないため、KeyListenerが機能しないことです。 KeyListenerに登録したので、JFrameが機能していることはすでに知っていますが、正常に機能しました。私のコードは現時点では次のようになっています。

myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);

誰かが以前にこのような問題に遭遇したことがありますか?これに関して私が欠けているものはありますか?

追伸:JPanelの中にコンポーネントはありません。背景に画像を描画するだけなので、JPanel自体に焦点を合わせ、その中の何かに焦点を合わせる必要はありません。

18
Vlad T.

パネルがフォーカス可能であることを示していますが、パネルはフォーカスを要求していません。 myPanel.requestFocus();を使用してみてください。

22
David Koelle

setFocusable(true)を使用してからrequestFocusInWindow()を使用します。ただし、後者は実行する必要がありますafterパネルを含むウィンドウが表示されるため、登録が必要になる可能性があります。ウィンドウリスナーを開き、ウィンドウでアクティブ化されたハンドラーコードでrequestFocusInWindow()を実行します。

注:具体的には、ウィンドウの後issetVisible(true)を呼び出した直後ではなく、表示されます。

6
Lawrence Dol

試してみてください

panel.setFocusable(true);
panel.setRequestFocusEnabled(true);

// some code here

panel.grabFocus();
2
John Doe

次のようなものを試してください。

    myFrame.addFocusListener(new FocusAdapter() {

        /**
         * {@inheritDoc}
         */
        @Override
        public void focusGained(FocusEvent aE) {
            myPanel.requestFocusInWindow();
        }
    });
1
Bram Janssens

私は時々同様の問題に直面します。場合によっては、フレーム内にあるパネル内の特定のコントロール(たとえば、キーボード入力を行う入力ボックス)にフォーカスを設定または要求する方が、フォーカスを要求するよりも優れていることに気付きました。ペイン自体。

1
Uri