2009-08-27 10 views
0

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

私は装飾されていないJDialogに切り替えようとしましたが、これは私のタスクバーの問題を修正しましたが、新しいものを導入しました。 JDialogでsetVisible(true)が呼び出されると、フォーカスがフレームから取り除かれます。タイトルバーの色がこれを示すように変わり、プロフェッショナルではありません。装飾されていないのJFrame、上記の問題の両方を使用して

私はそれが(JDesktopPaneの構造への切り替え)私のインターフェイスの完全な再設計を必要とするようなJInternalFrameを使用したくないが発生した、と私は必要ありません。 JInternalFrameの他の機能のいずれか

アイデア?

答えて

0

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

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:フルのPopupMenuを使用する代わりに、以下のリファクタリングを必要とするあなたのComponent、参照Popupを作成することです。例えばJavadocごとに、JWindowのは、私はSolarisは、対応する追加されている理由であると想像デスクトップの第一級オブジェクトは、次のとおりです。私はあなたの問題への「クイックフィックス」はないと思うそれ以外

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

アイコンをタスクバーに追加します。

+0

ありがとうございます、これは調べる価値があるようです。しかし、私はすでにポップアップの動作のためにすべての作業を行っており、可能であれば元の質問の小さな問題を処理したいと考えています。私はこのアプリケーションのリリースを1日から2日以内に行う必要があり、今のところリファクタリングを延期する必要があります。 –

+0

@Dan:最新の編集をご覧ください。ポップアップを直接使用すると、JWindowをポップアップに「注入」するだけで、リファクタリングを省くことができます。ポップアップをいつどこで生成するかをコード化する必要がありますが、それはかなり簡単です(私の元の例のように)。 – Adamski

関連する問題