2012-01-17 25 views
5

Bir TrayIcon ürününe bağlı olarak bir JPopupMenu eklenmiştir. Açılır menüye bir JMenuItem eklediğimde, bu açılır menünün boyutunu bilmek istiyorum. Ancak boyut hesaplanmaz: getBounds(), getSize() ve getVisibleRect() tümü sıfırdan sıfır boyutlarına döner.Bir JPopupMenu boyutunu nasıl edinebilirim?

Resimde gördüğünüz gibi, popup menüsü kesinlikle 'un boyutuna sahiptir.
Tray Popup Menu
Şimdi nasıl açılır menünün boyutunu alabilirim? onlar fark edilene kadar

cevap

5

Bileşenleri bir boyutu yoktur. Temel olarak görünür hale gelinceye kadar (veya paketlenmiş).

Bu neden önemlidir, sistem menüsü konumlandırma bakıyor? Gereksinimi biliyorsak belki daha iyi bir çözüm sağlayabiliriz.

Bir kesmek sonra PopupMenuListener kullanmayı deneyin ve popupMenuWillBecomeVisible() olay işlemek istiyorum. Ardından kodunuzu bir SwingUtilities.invokeLater() 'da sarmalamanız gerekecektir, böylece menü görünür hale geldikten sonra kod yürütülür.

0

Bunun içine bakıyordum çünkü bir AWT PopupMenu yerine TrayIcon için JPopupMenu kullanmak istedim. Bir JPopupMenu'nun pack() numarası bulunmadığından, yukarıdaki yöntem elbette çalışacaktır. ağır grafik yüksüz sadece basit bir menü ise , menüleri ekledikten sonra basitçe kısa bir an için menü görünür hale getirerek, sisteme tuzağa düşürebileceğini: Bundan sonra
myjPop.setVisible(true);
myjPop.setVisible(false);
menünün boyutunu var . Şimdiye kadarki en iyi çözüm bu değil, ama basit ve hile yapar.

0

Bu soruna başka bir çözüm buldum. Show() yöntemini iki kez çağırabilirsiniz.

öncelikle boyut özelliklerini başlatılır yöntemini çağırdıktan sonra, ikinci kez istenilen yerde açılır menü gösterilsin. İşte bir örnek: Ben popmenu genişliği bilmemiz gerekir Bunu yapmak için düğmenin yanındaki menüsünü görüntülemek isteyen

enter image description here

ben ilk kez menu.getWidth() çağırırsanız o olacak İlk çağrıdan sonra 0 döndürürseniz, açılır menü tarafından açılan değer döndürülür;

int firstX = refreshButton.getLocation().x; 
int firstY = refreshButton.getLocation().y; 
menu.show(toolBar, firstX, firstY); 
menu.show(toolBar, firstX - menu.getWidth(), firstY);