2013-07-03 7 views
11

नीचे उचित बटन वापस नहीं लौटा रहा है mouseDragged ईवेंट से दबाए गए बटन को मैं कैसे जान सकता हूं?माउस

मुझे mouseDragged() में कोई समस्या है क्योंकि MouseEventgetButton() के लिए 0 लौटाता है। मुझे माउस स्थान, या यहां तक ​​कि माउस क्लिक का पता लगाने में कोई समस्या नहीं है। mouseClicked() घटना getButton() के लिए उपयुक्त बटन लौटाती है।

कोई सुझाव यह है कि मैं यह कैसे कर सकता हूं? मुझे लगता है कि मैं mouseClicked, या mousePressed का उपयोग करके एक कार्य-आसपास कर सकता हूं, लेकिन मैं इसे mouseDragged के भीतर रखना चाहता हूं।

आपके समय और उत्तर के लिए धन्यवाद।

+0

क्या आप दाहिने माउस बटन से खींच सकते हैं, मैं केवल बाएं माउस बटन – DevZer0

+1

के साथ खींच लिया गया है, मैंने दोनों बटनों का परीक्षण किया, और यह दोनों बटनों के लिए 0 भेजा। –

उत्तर

16

के रूप में टिप्पणियों और अन्य उत्तर में बताया, SwingUtilities इस तरह के मामलों के लिए तीन तरीके है, जो सभी MouseEvents लिए काम करना चाहिए प्रदान करता है:

SwingUtilities.isLeftMouseButton(aMouseEvent); 
SwingUtilities.isRightMouseButton(aMouseEvent); 
SwingUtilities.isMiddleMouseButton(aMouseEvent); 

के रूप में अपने दृष्टिकोण के साथ समस्या क्या है, getButton() की जावाडोक कहते हैं:

माउस बटन के जो भी, यदि कोई हो, तो राज्य बदल गया है।

के बाद से बटन, जबकि यह नीचे आयोजित किया जा रहा परिवर्तन नहीं करता है की राज्य, getButton() आमतौर पर NO_BUTTONmouseDragged में वापस आ जाएगी। Ctrl, Alt, आदि में बटन और संशोधक की स्थिति की जांच करने के लिए, आप getModifiersEx() का उपयोग कर सकते हैं। उदाहरण के लिए, नीचे दिए गए कोड की जाँच करता है कि BUTTON1 नीचे है, लेकिन BUTTON2 नहीं है:

int b1 = MouseEvent.BUTTON1_DOWN_MASK; 
int b2 = MouseEvent.BUTTON2_DOWN_MASK; 
if ((e.getModifiersEx() & (b1 | b2)) == b1) { 
    // ... 
} 
+0

आप पहले भाग (जावाडोक) के बारे में सही हैं, लेकिन मुझे लगता है कि 'स्विंग यूटिलिटीज .इस लाइफटाउसबटन()' का उपयोग करना बेहतर है (अन्य उत्तर देखें) – xav

+1

@xav चूंकि यह पहले ही स्वीकार्य उत्तर है, मैंने बेहतर दृश्यता के लिए स्विंग यूटिलिटीज दृष्टिकोण जोड़ा (और विस्तारित किया गया है कि आप इसके बजाय 'getModifiersEx' क्यों चुन सकते हैं)। –

0

यह संभवतः आपके जावा सैंडबॉक्स की समस्या हो सकती है।

निम्नलिखित कोड हर समय अच्छी तरह से काम करता है (लगभग, जैसा कि आप देख सकते हैं)।

@Override 
public void mouseDragged(MouseEvent e) { 
    e.getButton(); 
} 

कृपया एक अलग मशीन पर अपना कोड आज़माएं।

2
int currentMouseButton = -1; 
@Override 
public void mousePressed(MouseEvent e) { 
    currentMouseButton = e.getButton(); 
} 

@Override 
public void mouseReleased(MouseEvent e) { 
    currentMouseButton = -1; 
} 

@Override 
public void mouseDragged(MouseEvent e) { 
    if (currentMouseButton == 3) { 
     System.out.println("right button"); 
    } 
} 
6

याकूब का अधिकार है कि getButton() आप डिजाइन द्वारा बटन नहीं मिलता है। हालांकि, मैं getModifiersEx() पर सा आपरेशन की तुलना में एक क्लीनर समाधान नहीं मिला है, कि तुम भी mouseDragged भीतर का उपयोग कर सकते हैं:

if (SwingUtilities.isLeftMouseButton(theMouseEvent)) { 
    //do something 
} 

इसी प्रकार के तरीकों मध्य बटन और सही बटन के लिए मौजूद हैं।

+0

आप सही हैं। और मुझे लगता है कि यह 'getModifiersEx()' (मैकोज़, लिनक्स, ... की तुलना में पोर्टेबिलिटी के लिए भी बेहतर है ...) – xav

+0

@xav पोर्टेबिलिटी के मामले में, [getModifiersEx()] (https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html#getModifiersEx()) बिल्कुल ठीक है वही (बहुत पोर्टेबल), क्योंकि 'isLeftMouseButton (..)' और सह। इसके संदर्भ में विधियों को लागू किया जाता है। [यहां] देखें (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/SwingUtilities.java#SwingUtilities.isLeftMouseButton%28java.awt.event .MouseEvent% 29)। ये बस अधिक पठनीय सुविधा विधियां हैं। –