java - मैं जावा स्विंग में राइट क्लिक संदर्भ मेनू कैसे बना सकता हूं?




3 Answers

आप शायद मेनू पर setVisible(true) को मैन्युअल रूप से कॉल कर रहे हैं। इससे मेनू में कुछ गंदा छोटी गाड़ी का व्यवहार हो सकता है।

show(Component, int x, int x) विधि आपको होने वाली सभी चीजों को संभालती है, (माउसओवर पर चीजों को हाइलाइट करना और आवश्यक होने पर पॉपअप को बंद करना) जहां setVisible(true) का उपयोग करना कोई अतिरिक्त व्यवहार जोड़ने के बिना मेनू दिखाता है।

राइट क्लिक करने के लिए पॉपअप मेनू बस एक JPopupMenu

class PopUpDemo extends JPopupMenu {
    JMenuItem anItem;
    public PopUpDemo(){
        anItem = new JMenuItem("Click Me!");
        add(anItem);
    }
}

फिर, आपको बस इतना करना है कि एक कस्टम MouseListener को उन घटकों में जोड़ें जो आप मेनू को पॉपअप करना चाहते हैं।

class PopClickListener extends MouseAdapter {
    public void mousePressed(MouseEvent e){
        if (e.isPopupTrigger())
            doPop(e);
    }

    public void mouseReleased(MouseEvent e){
        if (e.isPopupTrigger())
            doPop(e);
    }

    private void doPop(MouseEvent e){
        PopUpDemo menu = new PopUpDemo();
        menu.show(e.getComponent(), e.getX(), e.getY());
    }
}

// Then on your component(s)
component.addMouseListener(new PopClickListener());

बेशक, ट्यूटोरियल में थोड़ी अधिक गहराई से स्पष्टीकरण होता है।

नोट: यदि आप देखते हैं कि पॉपअप मेनू उपयोगकर्ता द्वारा क्लिक किए जाने के तरीके से दूर दिखाई दे रहा है, तो x और y निर्देशांक के लिए e.getXOnScreen() और e.getYOnScreen() विधियों का उपयोग करने का प्रयास करें।

मैं वर्तमान में राइट क्लिक पर एक नया JMenu को तुरंत चालू करके और माउस की स्थिति के लिए अपना स्थान सेट करके एक राइट-क्लिक संदर्भ मेनू बना रहा हूं ... क्या कोई बेहतर तरीका है?




जावा ट्यूटोरियल के मेनू लेख का उपयोग कैसे करें में एक पॉपअप मेनू लाने पर एक अनुभाग है जो बताता है कि JPopupMenu क्लास का उपयोग कैसे करें।

ट्यूटोरियल में उदाहरण कोड दिखाता है कि MouseListener को उन घटकों में कैसे जोड़ना है जो पॉप-अप मेनू प्रदर्शित करना चाहिए, और मेनू के अनुसार प्रदर्शित करता है।

(जिस विधि का आप वर्णन करते हैं वह ट्यूटोरियल एक घटक पर पॉप-अप मेनू दिखाने का तरीका प्रस्तुत करता है।)




मैं उस विधि के लिए उपयोग को सही कर दूंगा जो @ बुलीविल्लप्लाजा ने सुझाव दिया था। कारण यह है कि जब मैं केवल टेक्स्ट को जोड़ने के लिए टेक्स्ट जोड़ने के लिए प्रयास करता हूं, यह दृश्यमान नहीं है, और यदि मैं इसे संदर्भ में जोड़ता हूं तो मेनू और कुछ पैनल इसे पारिस्थितिकी: यदि मैं डिज़ाइन संपादक पर स्विच करने का प्रयास करता हूं तो अलग-अलग पैरेंट डबल एसोसिएशन।

TexetObjcet.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            if (SwingUtilities.isRightMouseButton(e)){
                contextmenu.add(TexetObjcet);
                contextmenu.show(TexetObjcet, 0, 0);
            }
        }
    }); 

इस तरह माउस ऑब्जेक्ट को टेक्स्ट ऑब्जेक्ट के लिए बनाएं जिस पर आपको पॉपअप होना चाहिए। यह तब होगा जब आप अपने टेक्स्ट ऑब्जेक्ट पर राइट क्लिक करेंगे तो वह उस पॉपअप को जोड़ देगा और इसे प्रदर्शित करेगा। इस तरह आपको उस त्रुटि का सामना नहीं करना पड़ता है। समाधान कि @ बुलीविल्लप्लाजा आपके कार्यक्रम में लागू करने के लिए बहुत अच्छा, समृद्ध और तेज़ है, इसलिए आपको इसे देखना चाहिए कि आप इसे कैसा पसंद करते हैं।




Related

java swing menu contextmenu jpopupmenu