swing:mouse_events

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

swing:mouse_events [2015/05/16 22:33]
gthanos [MouseMotionListener Interface]
swing:mouse_events [2016/02/26 11:15]
Line 1: Line 1:
-====== Mouse Events & Mouse Listeners ====== 
  
-Κάθε φορά που μετακινείτε το ποντίκι ή πατάτε κάποιο κουμπί στο ποντίκι σας δημιουργείτε ένα //event// του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseEvent.html|MouseEvent]]. Αντίστοιχα,​ εάν μετακινείτε την ροδέλα του ποντικιού σας, τότε παράγεται ένα //event// του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseWheelEvent.html|MouseWheelEvent]]. Σε αυτή την ενότητα θα ασχοληθούμε αποκλειστικά με //​MouseEvents//​. 
- 
-Για να λάβετε ένα MouseEvent θα πρέπει να ορίσετε για τα //​Components//​ που θέλετε να ακούν τα συγκεκριμένα //events// ένα αντικείμενο του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseListener.html|MouseListener]] ή [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseMotionListener.html|MouseMotionListener]] ως //​Listener//​. Ο πρώτος τύπος //​Listener//​ αφορά τα events που συνδέονται με τα πλήκτρα του ποντικιού,​ ενώ ο δεύτερος τύπος //​Listener//​ αφορά την κίνηση του ποντικού. ​ 
- 
-===== MouseListener Interface ===== 
- 
- 
-Ας δούμε αναλυτικότερα ποιες μεθόδους περιλαμβάνει το interface //​MouseListener//​. 
- 
-<code java> 
-void  mouseClicked(MouseEvent e) 
-//Invoked when the mouse button has been clicked (pressed and released) on a component. 
-void  mouseEntered(MouseEvent e) 
-//Invoked when the mouse enters a component. 
-void  mouseExited(MouseEvent e) 
-//Invoked when the mouse exits a component. 
-void  mousePressed(MouseEvent e) 
-//Invoked when a mouse button has been pressed on a component. 
-void  mouseReleased(MouseEvent e) 
-//Invoked when a mouse button has been released on a component. 
-</​code>​ 
- 
-Παρακάτω δίνεται ένα παράδειγμα από το site της Oracle, που δείχνει την χρήση του συγκεκριμένου Listener. 
- 
-<code java MouseEventDemo.java>​ 
- 
-package events; 
- 
-/* 
-* MouseEventDemo.java 
-*/ 
- 
-import java.awt.GridLayout;​ 
-import java.awt.Color;​ 
-import java.awt.Dimension;​ 
-import java.awt.event.MouseListener;​ 
-import java.awt.event.MouseEvent;​ 
- 
-import javax.swing.*;​ 
- 
-public class MouseEventDemo extends JPanel 
-    implements MouseListener { 
-  BlankArea blankArea; 
-  JTextArea textArea; 
-  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("​MouseEventDemo"​);​ 
-    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);​ 
-    ​ 
-    //Create and set up the content pane. 
-    JComponent newContentPane = new MouseEventDemo();​ 
-    newContentPane.setOpaque(true);​ //content panes must be opaque 
-    frame.setContentPane(newContentPane);​ 
-    ​ 
-    //Display the window. 
-    frame.pack();​ 
-    frame.setVisible(true);​ 
-  } 
-  ​ 
-  public MouseEventDemo() { 
-    super(new GridLayout(0,​1));​ 
-    blankArea = new BlankArea(Color.YELLOW);​ 
-    add(blankArea);​ 
-    textArea = new JTextArea();​ 
-    textArea.setEditable(false);​ 
-    JScrollPane scrollPane = new JScrollPane(textArea);​ 
-    scrollPane.setVerticalScrollBarPolicy( 
-        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);​ 
-    scrollPane.setPreferredSize(new Dimension(200,​ 75)); 
-    add(scrollPane);​ 
-    ​ 
-    //Register for mouse events on blankArea and the panel. 
-    blankArea.addMouseListener(this);​ 
-    addMouseListener(this);​ 
-    setPreferredSize(new Dimension(450,​ 450)); 
-    setBorder(BorderFactory.createEmptyBorder(20,​20,​20,​20));​ 
-  } 
-  ​ 
-  void eventOutput(String eventDescription,​ MouseEvent e) { 
-    textArea.append(eventDescription + " detected on " 
-        + e.getComponent().getClass().getName() 
-        + "​."​ + NEWLINE); 
-    textArea.setCaretPosition(textArea.getDocument().getLength());​ 
-  } 
-  ​ 
-  public void mousePressed(MouseEvent e) { 
-    eventOutput("​Mouse pressed (# of clicks: " 
-        + e.getClickCount() + "​)",​ e); 
-  } 
-  ​ 
-  public void mouseReleased(MouseEvent e) { 
-    eventOutput("​Mouse released (# of clicks: " 
-        + e.getClickCount() + "​)",​ e); 
-  } 
-  ​ 
-  public void mouseEntered(MouseEvent e) { 
-    eventOutput("​Mouse entered",​ e); 
-  } 
-  ​ 
-  public void mouseExited(MouseEvent e) { 
-    eventOutput("​Mouse exited",​ e); 
-  } 
-  ​ 
-  public void mouseClicked(MouseEvent e) { 
-    eventOutput("​Mouse clicked (# of clicks: " 
-        + e.getClickCount() + "​)",​ e); 
-  } 
-} 
-</​code>​ 
- 
-Από τις μεθόδους του παραπάνω interface, αλλά και από το παράδειγμα ίσως παρατηρήσατε ότι δεν μπορείτε να εξάγεται άμεσα καμία πληροφορία **α)** για τον αριθμό των clicks **β)** για το button το οποίο πατήθηκε. Την πληροφορία για τα δύο παραπάνω μπορείτε να την δείτε στην κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​awt/​event/​MouseEvent.html|MouseEvent]] και συγκεκριμένα στις μεθόδους 
-<code java> 
-int getButton() 
-//Returns which, if any, of the mouse buttons has changed state. 
-int getClickCount() 
-//Returns the number of mouse clicks associated with this event. 
-</​code>​ 
- 
-===== MouseMotionListener Interface ===== 
- 
-Οι μέθοδοι που πρέπει να υποστηρίζει κάθε αντικείμενο που υλοποιεί το interface //​MouseMotionListener//​ είναι οι παρακάτω. 
-<code java> 
-void mouseDragged(MouseEvent e) 
-//Invoked when a mouse button is pressed on a component and then dragged. 
-void mouseMoved(MouseEvent e) 
-//Invoked when the mouse cursor has been moved onto a component but no buttons have been pushed. 
-</​code>​ 
-Παρακάτω δίνεται ένα παράδειγμα από το site της Oracle, που δείχνει την χρήση του συγκεκριμένου Listener. 
-<code java MouseMotionEventDemo.java>​ 
-package events; 
- 
-/* 
- * MouseMotionEventDemo.java 
- * 
- */ 
- 
-import java.awt.Color;​ 
-import java.awt.Dimension;​ 
-import java.awt.event.MouseMotionListener;​ 
-import java.awt.event.MouseEvent;​ 
-import java.awt.GridLayout;​ 
- 
-import javax.swing.*;​ 
- 
-public class MouseMotionEventDemo extends JPanel 
-    implements MouseMotionListener { 
-  BlankArea blankArea; 
-  JTextArea textArea; 
-  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-dispatching thread. 
-   */ 
-  private static void createAndShowGUI() { 
-    //Create and set up the window. 
-    JFrame frame = new JFrame("​MouseMotionEventDemo"​);​ 
-    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);​ 
-    ​ 
-    //Create and set up the content pane. 
-    JComponent newContentPane = new MouseMotionEventDemo();​ 
-    newContentPane.setOpaque(true);​ //content panes must be opaque 
-    frame.setContentPane(newContentPane);​ 
-    ​ 
-    //Display the window. 
-    frame.pack();​ 
-    frame.setVisible(true);​ 
-  } 
-  ​ 
-  public MouseMotionEventDemo() { 
-    super(new GridLayout(0,​1));​ 
-    blankArea = new BlankArea(Color.YELLOW);​ 
-    add(blankArea);​ 
-    ​ 
-    textArea = new JTextArea();​ 
-    textArea.setEditable(false);​ 
-    JScrollPane scrollPane = new JScrollPane(textArea,​ 
-        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,​ 
-        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);​ 
-    scrollPane.setPreferredSize(new Dimension(200,​ 75)); 
-    ​ 
-    add(scrollPane);​ 
-    ​ 
-    //Register for mouse events on blankArea and panel. 
-    blankArea.addMouseMotionListener(this);​ 
-    addMouseMotionListener(this);​ 
-    ​ 
-    setPreferredSize(new Dimension(450,​ 450)); 
-    setBorder(BorderFactory.createEmptyBorder(20,​20,​20,​20));​ 
-  } 
-  ​ 
-  void eventOutput(String eventDescription,​ MouseEvent e) { 
-    textArea.append(eventDescription 
-        + " (" + e.getX() + ","​ + e.getY() + "​)"​ 
-        + " detected on " 
-        + e.getComponent().getClass().getName() 
-        + NEWLINE); 
-    textArea.setCaretPosition(textArea.getDocument().getLength());​ 
-  } 
-  ​ 
-  public void mouseMoved(MouseEvent e) { 
-    eventOutput("​Mouse moved",​ e); 
-  } 
-  ​ 
-  public void mouseDragged(MouseEvent e) { 
-    eventOutput("​Mouse dragged",​ e); 
-  } 
-} 
-</​code>​ 
- 
-Από το παραπάνω παράδειγμα μπορείτε να δείτε ​ 
-  - Πως μπορείτε να πάρετε την θέση του ποντικιού μετά από κάθε //event// (''​e.getX()''​ και ''​e.getY()''​. 
-  - Πως μπορείτε να δείτε με ποιο Swing component συνδέεται το συγκεκριμένο //event// (''​e.getComponent().getClass().getName()''​). 
swing/mouse_events.txt · Last modified: 2016/02/26 11:15 (external edit)