0

Java アプリケーションで JWindow オブジェクトを使用して、マウスオーバー ドロップダウン メニューをシミュレートしています。ユーザーが JLabel の上にマウスを置くと、ウィンドウが表示され、マウスがラベルまたは新しく表示されたウィンドウを出るまで表示されたままになります。私の問題は、ユーザーがこのアクションを実行するたびに、画面下部のタスク バーに新しいエントリがタイトルやアイコンなしで表示され、ウィンドウで setVisible(false) が呼び出されるとすぐに消えることです。

装飾のない JDialog に切り替えてみたところ、タスク バーの問題は解決しましたが、新しい問題が発生しました。JDialog で setVisible(true) が呼び出されると、フレームからフォーカスが奪われます。これを示すためにタイトル バーの色が変わります。

装飾されていない JFrame を使用すると、上記の問題の両方が発生しました

インターフェイスを完全に再設計する必要があるため (JDesktopPane 構造に切り替える)、JInternalFrame を使用したくありません。また、JInternalFrame の他の機能も必要ありません。

何か案は?

4

1 に答える 1

0

これには aJPopupMenuを使用できます。

popupMenu = new JPopupMenu();

Action showPopupAction = new AbstractAction("Show Popup") {
  public void actionPerformed(ActionEvent e) {
    AbstractButton btn = (AbstractButton)e.getSource();
    Point buttonXY = btn.getLocationOnScreen();
    popupMenu.setLocation((int) buttonXY.getX(), ((int) buttonXY.getY()) + btn.getHeight() + 2);
    popupMenu.setVisible(true);
  }
};

JButton btn = new JButton(showPopupAction);

EDIT : 完全な JPopupMenu を使用する代わりに、Popupあなたの を参照する を作成することComponentです。これにより、リファクタリングが少なくて済みます。例えば

Component myMnu = ...
Popup popup = new Popup(null, myMnu, 100, 100);
popup.show();

それ以外に、あなたの問題に対する「迅速な解決策」はないと思います.Javadocsによると、JWindowはデスクトップのファーストクラスの市民であり、Solarisが対応するアイコンをタスクバーに追加している理由だと思います。

于 2009-08-27T13:04:50.537 に答える