2013-05-07 6 views
8

जावा वेबसाइट से:BUTTON1_MASK और BUTTON1_DOWN_MASK के बीच का अंतर क्या है?

BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant. 
BUTTON1_MASK = The Mouse Button1 modifier constant. 

मैं भी यकीन है कि क्या एक "संशोधक निरंतर" है नहीं कर रहा हूँ। अकेले एक विस्तारित एक चलो। मुझे समझ में आता है कि BUTTON1_MASK बाएं माउस बटन पर क्लिक होने पर केवल पूर्णांक प्रतिनिधित्व है।

उत्तर

8

BUTTON1_MASK मुखौटा एक घटना का संकेत बटन 1. BUTTON1_DOWN_MASK से आया है अवधारणात्मक रूप से समान है, लेकिन कि निरंतर की संस्करण बढ़ाया है।

दो तरीकों कि स्थिरांक की इस तरह के सेट लौट रहे हैं: InputEvent#getModifiers() और InputEvent#getModifiersEx(), और वे संशोधक स्थिरांक वापस आ जाएगी, या क्रमशः बढ़ाया संशोधक स्थिरांक।

From the docs (bold is mine):

बटन मुखौटा) InputEvent.getModifiers द्वारा दिया (केवल बटन है कि राज्य बदल गया है, नहीं वर्तमान सभी बटन के राज्य ... सभी की स्थिति प्राप्त करने के लिए दर्शाता है बटन और संशोधक कुंजी, InputEvent.getModifiersEx() का उपयोग करें।

and also (bold is mine):

विस्तारित संशोधक ऐसे एएलटी, CTRL, मेटा, और माउस बटन के रूप में सभी मोडल चाबियाँ, के राज्य सिर्फ के बाद घटना हुई

प्रतिनिधित्व करते हैं उदाहरण के लिए, यदि उपयोगकर्ता बटन 2 के बाद बटन 1 दबाता है, और तब उन्हें उसी क्रम में रिलीज़ करता है, घटनाओं के निम्नलिखित अनुक्रम,210 उत्पन्न होता है:

MOUSE_PRESSED: BUTTON1_DOWN_MASK 
MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK 
MOUSE_RELEASED: BUTTON2_DOWN_MASK 
MOUSE_CLICKED: BUTTON2_DOWN_MASK 
MOUSE_RELEASED: 
MOUSE_CLICKED: 

सब आप चाहते हैं एक बटन का पता लगाने के लिए है, तो 1 (सामान्य रूप से, बाएं) पर क्लिक करके इनमें से किसी काम करना चाहिए:

if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) { 
    System.out.println("BUTTON1_MASK"); 
} 

if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) { 
    System.out.println("BUTTON1_DOWN_MASK"); 
} 

इसके अलावा, आप भी देख सकते हैं InputEvent का यह खुला स्रोत संस्करण, which has some more useful comments, and shows what's happening inside

+0

यह एक लंबा समय रहा है लेकिन किसी को भी यह पढ़ता है: क्यों आपके कोड में एकल ampersand है? यानी e.getModifiers() और MouseEvent.BUTTON1_MASK। क्या यह एक सेट छेड़छाड़ का प्रतिनिधित्व कर रहा है? – user2316667

+1

@ user2316667, ऐसा इसलिए है क्योंकि 'getModifiers() 'और [getModifiersEx()] (http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html#getModifiersEx%28 % 2 9) विधियां एक पूर्णांक लौटाती हैं, जो झंडे के * संयोजन * को पकड़ सकती हैं। किसी भी ** एक ** एक पूर्णांक में विशेष ध्वज का परीक्षण करने के लिए, आप यह देखने के लिए '&' ऑपरेटर का उपयोग करते हैं कि वह विशेष बिट nonzero है (वह वहीं है जहां '! = 0' से आता है)। इसलिए, यदि बटन 1 बिट आपकी रुचि रखते हैं, तो आप इसे 'e.getModifiers() और BUTTON1_MASK! = 0' जैसे मास्क के साथ जांचें। यह बुलियन '&&' ऑपरेटर नहीं है ... यह कुछ अलग है। – Nate

+0

[अधिक जानकारी के लिए इस ट्यूटोरियल देखें] (http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm) ऑपरेटरों पर "bitwise और" जैसे। – Nate

3

दस्तावेज़ राज्य के रूप में, BUTTON1_MASK और BUTTON1_DOWN_MASK संशोधक स्थिरांक हैं, यानी वे MouseEvent#getModifiers के संयोजन के साथ उपयोग में हैं। वे, विस्तारित नहीं कर रहे हैं बल्कि एक मुखौटा मूल्यों के रूप में इस्तेमाल उदाहरण

@Override 
public void mousePressed(MouseEvent me) { 
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { 
     System.out.println("Left button pressed."); 
    } 
} 

BUTTON1_DOWN_MASK के लिए जबकि BUTTON1_MASK बस निर्धारित करने के लिए जो बटन दबाने में मदद करता है माउस बटन के राज्य का पता लगाने के लिए किया जाता है।

+0

यह उत्तर संक्षिप्त है। – smwikipedia

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