質問

クリックしてポップメニューを表示できるjwindow(常に一番上に設定)があります。ユーザーがウィンドウを右クリックすると、ポップメニューが表示されますが、ユーザーが他のウィンドウ(firefoxなど)をクリックしても、ポップメニューは消えません。

FocusListenerをjwindowに追加して修正しようとしました。FocusListenerを実装してオーバーライドします


    public void focusGained(FocusEvent e) {
    System.out.println("gain" );
    }

    public void focusLost(FocusEvent e) {
    System.out.println("lost" );
    }

ただし、そこにイベントが呼び出されることはありません。私も次のことを試しました


    addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            System.out.println("gain 2" );
        }
        });

このイベントも呼び出されません。

このjwindowsにあるのは、写真が描かれた単一のJLabelです。

役に立ちましたか?

解決

メモリからJWindowはフォーカス/ウィンドウイベントを受け取りません。

他のヒント

Jcodeをフォーカス可能にするには、 JWindow setFocusableWindowState(true)を呼び出す必要があります。しかし、その「まだ」は十分ではありません。 JWindow にもフォーカス可能なコンポーネントが必要であり、それでも動作させることができません。 JFrame setUndecorated()を使用することが最良の選択のようです。

フォーカス可能にするには、 new JWindow(parentFrame)のように、親 Frame JWindow を作成する必要があります。それを行うと、可視に設定したときに自動的にフォーカスが取得されるはずです。

あなたが何をしようとしているのか本当にわかりません。ポップアップを手動で非表示にしようとしている場合は、おそらくWindowListenerを使用してwindowDeactivatedイベントを処理する必要があります。

ポップアップメニューを本当に表示したい場合は、JPopupMenuを使用する必要があります。自分で実装する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top