7

मैं एक ऐसी विधि को कार्यान्वित करना चाहता हूं जहां उपयोगकर्ता को एक ही समय में बाएं और दाएं माउस बटन पकड़ने की आवश्यकता हो।जावा स्विंग दोनों माउस बटन

मैं स्विंग और जावा 1.7 का उपयोग कर रहा हूं। मैं इस की कोशिश की है, लेकिन यह दोनों-बटन मामले पता नहीं लगा पाया है कि मैं यह करने के लिए उम्मीद थी:

public void mousePressed(MouseEvent e) {  
    if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)){ 
       ///code here 
    } 
} 

मैं तरीकों अलग और अगर माउस बटन दबाया जाता है तय करने के लिए bool मूल्यों का उपयोग करने की कोशिश की और तो मैं यह पता लगाने के लिए एक शर्त निर्धारित करता हूं कि दोनों एक ही समय में दबाए जाते हैं, लेकिन यह काम भी बाहर काम करता है ..

+2

'मैंने माउस बटन दबाए जाने के लिए विधियों को अलग करने और बूल वैल्यू का उपयोग करने की कोशिश की और फिर मैं यह पता लगाने के लिए एक शर्त निर्धारित करता हूं कि दोनों एक ही समय में दबाए जाते हैं, लेकिन यह भी काम करता है .. - एक उचित दृष्टिकोण की तरह लगता है। अपना [एसएससीसीई] (http://sscce.org/) पोस्ट करें जो दिखाता है कि आपने क्या प्रयास किया है। – camickr

+0

आपके लिए ब्याज के लिए बहुत बहुत धन्यवाद ... लेकिन नीचे कोड कोड काम करता है, यह लगभग समान था, लेकिन अगर माउस दबाया गया तो निर्णय पर आधारित था (स्विंगउटिविटीज.इस लेटाफ्ट हाउसबटन (ई)) {left = true} और जो काम नहीं करता ... अजीब: डी –

उत्तर

6

यह एक एसएससीसीई है जो आप चाहते हैं ... यानी यदि मैं आपका प्रश्न सही ढंग से समझ गया ।

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

public class StackOverflow15957076 extends MouseAdapter 
{ 
    private JLabel status; 

    private boolean isLeftPressed; 
    private boolean isRightPressed; 

    public StackOverflow15957076() 
    { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 

     JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER)); 

     status = new JLabel ("waiting for both mouse buttons..."); 

     status.addMouseListener (this); 

     panel.add (status); 

     frame.add (panel); 

     frame.pack(); 
     frame.setVisible (true); 

     isLeftPressed = false; 
     isRightPressed = false; 
    } 

    @Override 
    public void mousePressed (MouseEvent e) 
    { 
     if (SwingUtilities.isLeftMouseButton (e)) 
     { 
      isLeftPressed = true; 
     } 
     else if (SwingUtilities.isRightMouseButton (e)) 
     { 
      isRightPressed = true; 
     } 

     if (isLeftPressed && isRightPressed) 
     { 
      status.setText ("both buttons are pressed"); 
     } 
    } 

    @Override 
    public void mouseReleased (MouseEvent e) 
    { 
     if (SwingUtilities.isLeftMouseButton (e)) 
     { 
      isLeftPressed = false; 
     } 
     else if (SwingUtilities.isRightMouseButton (e)) 
     { 
      isRightPressed = false; 
     } 

     status.setText ("waiting for both mouse buttons..."); 
    } 

    public static void main (String[] args) 
    { 
     SwingUtilities.invokeLater (new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new StackOverflow15957076(); 
      } 
     }); 
    } 
} 
+0

मैं ऊपर उठ गया होता लेकिन आपने SwingUtilities.isXXX विधियों (ओपी द्वारा उपयोग किए जाने वाले) के बजाय MouseEvent.BUTTON1/BUTTON3 का उपयोग किया जो समझने में आसान है। – camickr

+0

आपको बहुत धन्यवाद, यह पूरी तरह से काम करता है ... –

+0

@camickr 'स्विंग यूटिलिटीज' में विधियां एक अच्छी तरह से अमूर्त हैं, लेकिन मुझे लगता है कि यह वही कार्यक्षमता है ... आप जो भी सोचते हैं वह सबसे अच्छा लगता है :)। –

1

ऐसा लगता है कि यह संभव नहीं है, क्योंकि माउस ईवेंट क्रमशः निकाल दिए जाते हैं। उदाहरण के लिए, this SO question/answers देखें।

तो आपको यह तय करना होगा कि "एक ही समय में" वास्तव में आपके लिए है (यानी समय में कितना करीब होना चाहिए)। फिर आप दो अलग-अलग आयोजनों को कैप्चर कर सकते हैं और उनके getWhen() मानों की तुलना कर सकते हैं।

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