2015-06-03 10 views
19

मैं एक जावा स्विंग एप्लिकेशन है जो बड़े डेटा को प्रदर्शित करने के लिए 'पैन-सक्षम' जेकंपोनेंट का उपयोग करता है। जब उपयोगकर्ता माउस व्हील ले जाता है, तो मैं इन घटनाओं को सुनता हूं, और स्क्रॉल की गई राशि से JComponent की सामग्री को अपडेट करता हूं।उपयोगकर्ता का पता लगाने के लिए कैसे ट्रैकपैड का उपयोग कर रहा है और माउस स्विंग में माउस नहीं है?

मैं एक अलग व्यवहार उपयोगकर्ता

  • एक शास्त्रीय माउस
  • का उपयोग कर एक टचपैड का उपयोग है, इस पर निर्भर करता है, लोगों को आधुनिक मैक लैपटॉप पर पाया जा सकता है के रूप में करना चाहते हैं।

मैं कैसे पता लगा सकता हूं कि उपयोगकर्ता स्क्रॉल ईवेंट उत्पन्न करने के लिए माउस व्हील बनाम ट्रैकपैड का उपयोग कर रहा है? मैं जावा 1.6 स्विंग में भरोसा कर रहा हूं, सी मैं जावाएफएक्स नहीं जा सकता।

प्रश्न के पीछे कहानी: मैं उपयोगकर्ता को माउस व्हील का उपयोग करते समय स्क्रॉलिंग ईवेंट में एक अच्छा जड़ता महसूस करना चाहता था। लेकिन निश्चित रूप से, मैकॉक्स पर, ट्रैकपैड की अपनी जड़ता सामग्री है। इसलिए मैं यह तय करना चाहता था कि मुझे जड़ आंदोलन उत्पन्न करना चाहिए या नहीं।

उत्तर

5

जावा स्विंग एक पुरानी तकनीक है, यह पारंपरिक माउस व्हील रोटेशन घटनाओं का समर्थन करती है।

जब आप पुराने व्हील माउस या व्हील ट्रैक-पैड का उपयोग करते हैं, तो यह हार्डवेयर व्हील के घूर्णन को पढ़ेगा।

जब आप आधुनिक लेजर माउस का उपयोग करते हैं, तो माउस आंदोलन को रोटेशन गति में अनुवादित किया जाएगा।

आप आधुनिक मैक लैपटॉप में से एक की तरह एक स्पर्श ट्रैक पैड का उपयोग करते हैं, स्क्रॉल इशारा, घूर्णन गति में अनुवाद किया जाएगा छोड़ दिया और सही क्लिक के रूप में एकल & डबल स्पर्श (ओएस माउस पैड विन्यास के आधार पर)।

यदि आप यूएसबी या ट्रैक-पैड यूएसबी के माध्यम से अपने कंप्यूटर से कनेक्ट हैं, तो आप इनपुट डिवाइस को विस्तार से जांचने के लिए पुस्तकालयों का उपयोग कर सकते हैं, तो आप J-USB library आज़मा सकते हैं।

आंतरिक हार्डवेयर के लिए, आपको पहले ओएस के प्रकार की पहचान करनी होगी, और इसके आधार पर आप information on system and hardware in Java प्राप्त कर सकते हैं।

अंत में, यदि आपका एप्लिकेशन किसी उपयोगकर्ता के साथ इंटरैक्ट करता है, तो मैं सुझाव देता हूं कि उपयोगकर्ता से पूछें कि वे किस प्रकार का माउस उपयोग कर रहे हैं, और कॉन्फ़िगरेशन फ़ाइल या कुछ में संग्रहीत करें।

+1

ठीक है, यह वही है जो मुझे डर लगता है। तो स्पष्ट रूप से, आप मुझे बताते हैं कि स्विंग के साथ सही तरीके से जानने का कोई तरीका नहीं है? –

+0

@ जीन-यवेस हां, स्विंग आपको यह नहीं बता सकता कि –

+1

@ जीन-यवेस मुझे पता है कि यह थोड़ी देर हो गया है, लेकिन मैंने जवाब में ** अंत में ** खंड जोड़ा है। –

0

सही

  • AltDown माउस व्हील

  • के लिए प्रयोग किया जाता है पर क्लिक करें इस कोड

    1. MetaDown के लिए प्रयोग किया जाता है की कोशिश करो।

      public class Exp extends JFrame { 
      
          private String string; 
          private JLabel l; 
      
          public Exp() { 
           super("Title");  
           l = new JLabel("Status"); 
           add(l, BorderLayout.SOUTH); 
           addMouseListener(new MouseClass());   
          } 
      
          private class MouseClass extends MouseAdapter { 
           public void mouseClicked(MouseEvent e) {     
            string = String.format("Clicked %d Times", e.getClickCount());    
            if(e.isMetaDown()) 
             string += " With Right Mouse Button"; 
            else if(e.isAltDown()) 
             string += " With Centre Mouse Button"; 
            else 
             string += " With Left Mouse Button";     
            l.setText(string); 
           } 
          } 
      } 
      

      इसके अलावा इस प्रयास करें:

      आप निर्धारित कर सकते माउस बटन के जो दबाया जाता है SwingUtilities से इन तीन तरीकों से,:

      isLeftMouseButton

      isMiddleMouseButton

      isRightMouseButton

    +0

    अधिक जानकारी के लिए: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html#isMiddleMouseButton%28java.awt.event.MouseEvent%29 – Programmer

    +0

    धन्यवाद! लेकिन असल में मुझे यह जानने में दिलचस्पी थी कि क्या ट्रैक व्हील या वास्तविक माउस द्वारा माउस व्हील इवेंट उत्पन्न होते हैं। –

    0

    माउस व्हील श्रोता एपीआई

    हालांकि MouseWheelListener केवल एक विधि है, यह इसी एडाप्टर वर्ग है - MouseAdapter। यह क्षमता माउस पॉइंटर से सभी प्रकार की घटनाओं को प्रबंधित करने के लिए घटक के लिए केवल एक एडाप्टर क्लास उदाहरण रखने के लिए सक्षम करती है।

    mouseWheelMoved(MouseWheelEvent) //Called when the mouse wheel is rotated. 
    

    निम्नलिखित कोड का टुकड़ा माउस पहिया घटना से निपटने से संबंधित है:

    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.event.MouseWheelEvent; 
    import java.awt.event.MouseWheelListener; 
    
    import javax.swing.*; 
    
    public class MouseWheelEventDemo extends JPanel 
         implements MouseWheelListener { 
        JTextArea textArea; 
        JScrollPane scrollPane; 
        static final String NEWLINE = System.getProperty("line.separator"); 
    
        public static void main(String[] args) { 
         /* Use an appropriate Look and Feel */ 
         try { 
          //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
          //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); 
          UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
         } catch (UnsupportedLookAndFeelException ex) { 
          ex.printStackTrace(); 
         } catch (IllegalAccessException ex) { 
          ex.printStackTrace(); 
         } catch (InstantiationException ex) { 
          ex.printStackTrace(); 
         } catch (ClassNotFoundException ex) { 
          ex.printStackTrace(); 
         } 
         /* Turn off metal's use of bold fonts */ 
         UIManager.put("swing.boldMetal", Boolean.FALSE); 
    
         //Schedule a job for the event dispatch thread: 
         //creating and showing this application's GUI. 
         javax.swing.SwingUtilities.invokeLater(new Runnable() { 
          public void run() { 
           createAndShowGUI(); 
          } 
         }); 
        } 
    
        /** 
        * Create the GUI and show it. For thread safety, 
        * this method should be invoked from the 
        * event dispatch thread. 
        */ 
        private static void createAndShowGUI() { 
         //Create and set up the window. 
         JFrame frame = new JFrame("MouseWheelEventDemo"); 
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
         //Create and set up the content pane. 
         JComponent newContentPane = new MouseWheelEventDemo(); 
         newContentPane.setOpaque(true); //content panes must be opaque 
         frame.setContentPane(newContentPane); 
    
         //Display the window. 
         frame.pack(); 
         frame.setVisible(true); 
        } 
    
        public MouseWheelEventDemo() { 
         super(new BorderLayout()); 
    
         textArea = new JTextArea(); 
         textArea.setEditable(false); 
         scrollPane = new JScrollPane(textArea); 
         scrollPane.setVerticalScrollBarPolicy(
           JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
         scrollPane.setPreferredSize(new Dimension(400, 250)); 
         add(scrollPane, BorderLayout.CENTER); 
         textArea.append("This text area displays information " 
           + "about its mouse wheel events." 
           + NEWLINE); 
    
         //Register for mouse-wheel events on the text area. 
         textArea.addMouseWheelListener(this); 
    
         setPreferredSize(new Dimension(450, 350)); 
         setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); 
        } 
    
        //Append to the text area and make sure the new text is visible. 
        void eventOutput(String eventDescription, MouseWheelEvent e) { 
         textArea.append(e.getComponent().getClass().getName() 
         + ": " 
           + eventDescription); 
         textArea.setCaretPosition(textArea.getDocument().getLength()); 
        } 
    
        public void mouseWheelMoved(MouseWheelEvent e) { 
         String message; 
         int notches = e.getWheelRotation(); 
         if (notches < 0) { 
          message = "Mouse wheel moved UP " 
            + -notches + " notch(es)" + NEWLINE; 
         } else { 
          message = "Mouse wheel moved DOWN "   
            + notches + " notch(es)" + NEWLINE; 
         } 
         if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { 
          message += " Scroll type: WHEEL_UNIT_SCROLL" + NEWLINE; 
          message += " Scroll amount: " + e.getScrollAmount() 
          + " unit increments per notch" + NEWLINE; 
          message += " Units to scroll: " + e.getUnitsToScroll() 
          + " unit increments" + NEWLINE; 
          message += " Vertical unit increment: " 
            + scrollPane.getVerticalScrollBar().getUnitIncrement(1) 
            + " pixels" + NEWLINE; 
         } else { //scroll type == MouseWheelEvent.WHEEL_BLOCK_SCROLL 
          message += " Scroll type: WHEEL_BLOCK_SCROLL" + NEWLINE; 
          message += " Vertical block increment: " 
            + scrollPane.getVerticalScrollBar().getBlockIncrement(1) 
            + " pixels" + NEWLINE; 
         } 
         eventOutput(message, e); 
        } 
    } 
    

    एक प्रणाली अपने माउस पहिया के रूप में लग सकता है के लिए इकाई वेतन वृद्धि का उपयोग करता है के लिए MouseWheelEventDemo से उत्पादन इस प्रकार है:

    javax.swing.JTextArea: Mouse wheel moved UP 1 notch(es) 
        Scroll type: WHEEL_UNIT_SCROLL 
        Scroll amount: 3 unit increments per notch 
        Units to scroll: -3 unit increments 
        Vertical unit increment: 16 pixels 
    
    +0

    पूर्ण स्पष्टीकरण के लिए - https://docs.oracle.com/javase/tutorial/uiswing/events/mousewheellistener.html –

    +0

    धन्यवाद! लेकिन साथ ही, यह सवाल नहीं है। मैं सिर्फ यह जानना चाहता था कि क्या इन घटनाओं को माउस या टचपैड द्वारा निकाल दिया गया है या नहीं। –

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