2012-09-05 14 views
5

मैं एक साधारण जावा स्विंग ऐप पर काम कर रहा हूं, जो बनाए जाने पर सिस्टम ट्रे में एक आइकन जोड़ता है। मैं जो करने का प्रयास कर रहा हूं वह यह पता लगाने के लिए है कि यह आइकन उपयोगकर्ता द्वारा क्लिक किया गया है (चाहे बाएं क्लिक या दाएं क्लिक के माध्यम से), कोई पॉपअप मेनू नहीं है, मैं आइकन को क्लिक करने पर ऐप को पुनर्स्थापित करना चाहता हूं।जावा ऐप के लिए सिस्टम ट्रेएकॉन पर एकल क्लिक का पता लगाने के लिए कैसे?

इस कोड मैं का उपयोग कर रहा है:

SystemTray tray = SystemTray.getSystemTray(); 
    Image icon = toolkit.getImage("icon.png"); 

    ActionListener listener = new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      System.out.println("click detected"); 
     } 
    }; 

    TrayIcon trayIcon = new TrayIcon(icon, "Test Program", null); 
    trayIcon.addActionListener(listener); 
    tray.add(trayIcon); 

जब मैं इस कार्यक्रम हालांकि जाए तो क्या होता, कि एकल क्लिक (बाएं या दाएं) पर कोई असर नहीं है, लेकिन जब मैं डबल क्लिक करें, तो यह कंसोल में संदेश 'क्लिक पता' दिखाता है।

एकल क्लिक भी प्राप्त करने के लिए मैं क्या कर सकता हूं? क्या मुझे इसके लिए एक माउस लिस्टर का उपयोग करने की ज़रूरत है? (मैंने सुना है कि MouseListeners समस्याएं पैदा कर सकता है, और ActionListeners बेहतर हैं)

+0

क्या मंच? विंडोज? लिनक्स? – Femi

+0

@ फेमी विंडोज़ - –

+2

केवल 30k up_votes ???, +1 – mKorbel

उत्तर

11

आप MouseListener इस्तेमाल कर सकते हैं, यानी:

icon.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     if (e.getClickCount() == 1) { 

     } 
    } 
}); 

अधिक जानकारी के लिए How to Write a Mouse Listener देखें।

संपादित करें: ActionListener बनाम MouseListener

निम्न स्तर और अर्थ की घटनाओं की एक अवधारणा है। जब भी संभव हो, आपको कम-स्तरीय घटनाओं की बजाय अर्थपूर्ण घटनाओं को सुनना चाहिए, जैसे कि माउस इवेंट्स की बजाय एक्शन इवेंट्स सुनना। Low-Level Events and Semantic Events में अधिक जानकारी के लिए पढ़ें।

इस मामले में आपको ईवेंट से अधिक जानकारी चाहिए ताकि माउसलिस्टर की आवश्यकता हो।

+0

क्या माउसलिस्टेनर्स और एक्शनलिस्टर्स के साथ कोई समस्या नहीं है? –

+0

@ClickUpvote देखें कि मेरा अंतिम संपादन एक्शनलिस्टर और माउसलिस्टर के बीच एक अंतर को स्पष्ट कर सकता है या नहीं। – tenorsax

+0

यह भी जांचना चाह सकता है कि e.getID() == MouseEvent.MOUSE_CLICKED जब तक कि आप केवल "माउस डाउन" अधिसूचना (जो आप कर सकते हैं ...) – rogerdpack

संबंधित मुद्दे