2012-01-17 14 views
5

मेरे पास TrayIcon है जो JPopupMenu से जुड़ा हुआ है। जब मैं पॉपअप मेनू में JMenuItem जोड़ता हूं, तो मैं इस पॉपअप मेनू के आयाम को जानना चाहता हूं। लेकिन आयाम की गणना नहीं की जाती है: getBounds(), getSize() और getVisibleRect() सभी शून्य-दर-शून्य आयाम लौटाते हैं।एक JPopupMenu का आयाम कैसे प्राप्त करें?

जैसा कि आप छवि में देख सकते हैं, पॉपअप मेनू निश्चित रूप से में एक आयाम है।
Tray Popup Menu
अब मैं पॉपअप मेनू का आयाम कैसे प्राप्त कर सकता हूं?

उत्तर

5

घटक तब तक आकार नहीं रखते जब तक उन्हें एहसास नहीं हुआ। जिसका मूल रूप से तब तक मतलब है जब तक वे दिखाई नहीं दे रहे हैं (या पैक)।

यह महत्वपूर्ण क्यों है, सिस्टम मेनू की स्थिति के बाद दिखता है? अगर हम आवश्यकता को जानते हैं तो हम एक बेहतर समाधान प्रदान कर सकते हैं।

यदि आप एक हैक चाहते हैं तो पॉपअपमेनू लिस्टनर का उपयोग करने का प्रयास करें और popupMenuWillBecomeVisible() ईवेंट को संभालें। फिर आपको अपने कोड को SwingUtilities.invokeLater() में लपेटने की आवश्यकता होगी ताकि मेनू दृश्यमान होने के बाद कोड निष्पादित हो।

0

मैं इसे देख रहा था क्योंकि मैं एडब्ल्यूटी पॉपअपमेनू के बजाय TrayIcon के लिए JPopupMenu का उपयोग करना चाहता था। चूंकि एक जेपीओपमेनू के पास pack() नहीं है, ऊपर से विधि निश्चित रूप से काम करेगी। यदि यह भारी ग्राफिक्स भार के बिना सिर्फ एक सरल मेनू है, तो आप प्रणाली, मेनू जोड़ने के बाद चाल कर सकते हैं बस मेनू एक छोटी पल के लिए दृश्यमान बनाकर:
myjPop.setVisible(true);
myjPop.setVisible(false);
इस के बाद आप मेनू का आकार है । यह अब तक का सबसे अच्छा समाधान नहीं है, लेकिन यह आसान है और यह चाल है।

0

मेरे पास इस समस्या का एक और समाधान है। आप शो() विधि को दो बार कॉल कर सकते हैं।

विधि को कॉल करने के बाद पहले आयाम गुण प्रारंभ किए जाएंगे, दूसरी बार जब आप वांछित स्थान पर पॉपअप मेनू दिखाएंगे। यहाँ एक उदाहरण है:

मैं मेनू बटन के आगे प्रदर्शित करने के लिए यह मैं popmenu के लिए चौड़ाई पता करने की जरूरत क्या करना चाहते हैं enter image description here

अगर मैं पहली बार में 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); 
संबंधित मुद्दे