2009-09-03 13 views
5

जावा में एक तरीका है, सीधे यह जांचने के लिए कि माउस बटन में से कोई ईवेंट, श्रोताओं आदि का उपयोग किए बिना नीचे है या नहीं? मैं एक थ्रेड रखना चाहता हूं कि, हर 100 मिलीसेकंड या तो, यह जांचता है कि माउस बटन नीचे है या फिर कुछ करता है। तो यदि उपयोगकर्ता थोड़ी देर के लिए माउस बटन दबाता है तो यह कई प्रतिक्रियाओं को ट्रिगर करेगा।जावा माउस दबाया गया - घटनाओं के बिना

तो मैं जो खोज रहा हूं वह एक विधि है जो सामान्य घटना - हैंडलिंग सिस्टम के बिना माउस की स्थिति देता है।

धन्यवाद

+4

क्षमा करें, लेकिन ... क्यों? –

उत्तर

4

मुझे विश्वास है कि जावा में यह संभव नहीं है। वैसे यह जेएनआई के माध्यम से संभव है लेकिन यह दर्द की दुनिया है।

घटनाओं के साथ ऐसा करना मुश्किल नहीं है, और आपके बाकी ऐप के साथ बेहतर तरीके से एकीकृत होगा।

import javax.swing.*; 
import java.awt.event.*; 

public class Test { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     final JLabel label = new JLabel("Click on me and hold the mouse button down"); 
     label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     frame.getContentPane().add(label); 
     label.addMouseListener(new TimingMouseAdapter()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private static class TimingMouseAdapter extends MouseAdapter { 
     private Timer timer; 

     public void mousePressed(MouseEvent e) { 
      timer = new Timer(100, new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("Mouse still pressed..."); 
       } 
      }); 
      timer.start(); 
     } 

     public void mouseReleased(MouseEvent e) { 
      if (timer != null) { 
       timer.stop(); 
      } 
     } 

    } 
} 

इस संशोधन करना अलग-अलग समय समय के बाद (जैसे बदलते तूलिका मोड के रूप में) अलग अलग काम करने की सीधी-सपाट होना चाहिए: यहाँ कंसोल के लिए प्रत्येक 100 ms लिखते समय माउस बटन दबाया जाता है, इसका एक उदाहरण।

+0

वाह, धन्यवाद। मैं टाइमर का उपयोग करने की कोशिश करूंगा, फिर। –

4

मैं नहीं जानता कि क्या यह संभव है - शायद यह है।

हालांकि, आप हमेशा एक ईवेंट हैंडलर लिख सकते हैं जिसका एकमात्र काम वर्तमान माउस स्थिति का ट्रैक रखना है। फिर आपका 100 एमएमएस कोड बस पूछ सकता है।

+0

मैंने इसके बारे में सोचा, लेकिन यह थोड़ा और जटिल है। मैंने सोचा कि मैं कोशिश करता हूं और देखता हूं कि किसी को सीधे माउस की स्थिति प्राप्त करने के लिए कोई तरीका पता था, और यदि नहीं तो एक ईवेंट हैंडलर का उपयोग करें। –

2

चाहे यह संभव हो या नहीं, क्या आप वाकई ऐसा करना चाहते हैं?

ऐसा लगता है कि आपको इस तरह से क्लिक याद करने की संभावना है। 100 मिलीसेकंड एक सेकंड का दसवां हिस्सा है .. कई क्लिक लंबे समय तक नहीं टिकते हैं।

और यदि आप अपना मतदान लूप छोटा बनाते हैं, तो आप जो भी कर रहे हैं वह खिड़की को संकुचित करना है जिसके दौरान आप एक क्लिक को याद कर सकते हैं, इसलिए इससे अक्सर क्लिक कम हो जाएंगे। लेकिन यह अभी भी दौड़ की स्थिति होगी।

मुझे लगता है कि जटिलता के बारे में आपकी चिंता थ्रेडिंग मुद्दों से निपटने से उत्पन्न होती है, लेकिन जब तक आप हमें अधिक जानकारी नहीं देते, हम आपको बहुत मदद नहीं दे सकते।

+0

100 मिलिस सिर्फ मेरे सिर के ऊपर से था, मैं अलग-अलग समय के साथ प्रयोग करने की योजना बना रहा था। लापता क्लिक के बारे में अच्छा बिंदु। मैं ग्राफिक्स प्रोग्राम के लिए माउस को पेंटब्रश टूल के रूप में काम करने की कोशिश कर रहा हूं, जिसमें प्रोग्राम को प्रतिक्रिया देना शामिल होगा कि माउस को कितनी देर तक दबाया जाता है, अन्य चीजों के साथ। मैं जो खोजना चाहता हूं वह यह है कि माउस स्तर की निम्न स्तर, प्रत्यक्ष क्वेरी करना संभव है, और फिर मैं प्रयोग करूंगा, देखें कि यह कितना अच्छा काम करता है और या तो इसका उपयोग करता है या किसी ईवेंट हैंडलर का उपयोग करने का प्रयास करता है बजाय। –

+0

एक पेंटिंग प्रोग्राम के लिए, मैंने माउसमोशन लिस्टनर का उपयोग किया है और ड्राइंग की अनुमति देने के लिए माउस ड्रैग() लागू किया है। –

0

माउस स्थिति को संभालने के लिए श्रोता को लिखना काफी आसान होना चाहिए। AWTEventListener के परिचय के लिए Global Event Listeners देखें जो आपको एक ही श्रोता के साथ सभी माउस ईवेंट सुनने के लिए अनुमति देता है।

फिर श्रोता में आप अपना टाइमर शुरू करेंगे।

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