常にJWindowがフォーカスイベントを取得しない
質問
クリックしてポップメニューを表示できる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を使用する必要があります。自分で実装する必要はありません。