5

が付属していますTrayIconJPopupMenuポップアップ メニューに を追加するときJMenuItem、このポップアップ メニューのサイズを知りたいです。ただし、次元は計算されません:getBounds()getSize()あり、getVisibleRect()すべて 0 行 0 列の次元を返します。

画像でわかるように、ポップアップ メニューには確か次元があります。
トレイポップアップメニュー
ポップアップ メニューのサイズを取得するにはどうすればよいでしょうか。

4

3 に答える 3

5

コンポーネントは実現されるまでサイズを持ちません。これは基本的に、それらが表示される (またはパックされる) までを意味します。

システムがメニューを配置した後、なぜこれが重要なのですか? 要件がわかれば、より良いソリューションを提供できるかもしれません。

ハックが必要な場合は、PopupMenuListener を使用して popupMenuWillBecomeVisible() イベントを処理してみてください。次に、メニューが表示された後にコードが実行されるように、コードを SwingUtilities.invokeLater() でラップする必要があります。

于 2012-01-17T15:47:30.730 に答える
0

この問題には別の解決策があります。show() メソッドを 2 回呼び出すことができます。

最初にメソッドを呼び出した後、ディメンション プロパティが初期化され、2 回目に目的の場所にポップアップ メニューが表示されます。次に例を示します。

これを行うには、ボタンの横にメニューを表示したい popmenu の幅を知る必要がありますここに画像の説明を入力

初めて menu.getWidth() を呼び出すと、最初の呼び出しの後に 0 が返され、ポップアップ メニューが占める値が返されます。

int firstX = refreshButton.getLocation().x;
int firstY = refreshButton.getLocation().y;
menu.show(toolBar, firstX, firstY);
menu.show(toolBar, firstX -  menu.getWidth(), firstY);
于 2013-12-19T13:54:18.953 に答える
0

AWT PopupMenu の代わりにJPopupMenufor myを使用したかったので、これを調べていました。TrayIconJPopupMenu には がないためpack()、上記のメソッドはもちろん機能します。グラフィックスの負荷が高くない単純なメニューの場合は、メニューを追加した後、メニューを少しの間だけ表示するだけで、システムをだますことができます
myjPop.setVisible(true);
myjPop.setVisible(false);
。この後、メニューのサイズが得られます。これはこれまでで最高のソリューションではありませんが、シンプルでうまく機能します。

于 2013-03-26T12:52:51.683 に答える