swing:mouse_events
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| swing:mouse_events [2015/05/16 22:01] – created gthanos | swing:mouse_events [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| Κάθε φορά που μετακινείτε το ποντίκι ή πατάτε κάποιο κουμπί στο ποντίκι σας δημιουργείτε ένα //event// του τύπου [[http:// | Κάθε φορά που μετακινείτε το ποντίκι ή πατάτε κάποιο κουμπί στο ποντίκι σας δημιουργείτε ένα //event// του τύπου [[http:// | ||
| - | Για να λάβετε ένα MouseEvent θα πρέπει να ορίσετε για τα // | + | Για να λάβετε ένα MouseEvent θα πρέπει να ορίσετε για τα // |
| + | |||
| + | ===== MouseListener Interface ===== | ||
| + | |||
| + | |||
| + | Ας δούμε αναλυτικότερα ποιες μεθόδους περιλαμβάνει το interface // | ||
| <code java> | <code java> | ||
| Line 18: | Line 23: | ||
| </ | </ | ||
| - | Αντιστοίχως, οι μέθοδοι που πρέπει να υποστηρίζει κάθε αντικείμενο που υλοποιεί το interface // | + | Παρακάτω δίνεται ένα παράδειγμα από το 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(" | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | /* Use an appropriate Look and Feel */ | ||
| + | try { | ||
| + | // | ||
| + | // | ||
| + | UIManager.setLookAndFeel(" | ||
| + | } catch (UnsupportedLookAndFeelException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } catch (IllegalAccessException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } catch (InstantiationException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } catch (ClassNotFoundException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } | ||
| + | /* Turn off metal' | ||
| + | UIManager.put(" | ||
| + | //Schedule a job for the event dispatch thread: | ||
| + | //creating and showing this application' | ||
| + | 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(" | ||
| + | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| + | |||
| + | //Create and set up the content pane. | ||
| + | JComponent newContentPane = new MouseEventDemo(); | ||
| + | newContentPane.setOpaque(true); | ||
| + | frame.setContentPane(newContentPane); | ||
| + | |||
| + | //Display the window. | ||
| + | frame.pack(); | ||
| + | frame.setVisible(true); | ||
| + | } | ||
| + | |||
| + | public MouseEventDemo() { | ||
| + | super(new GridLayout(0, | ||
| + | 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, | ||
| + | add(scrollPane); | ||
| + | |||
| + | //Register for mouse events on blankArea and the panel. | ||
| + | blankArea.addMouseListener(this); | ||
| + | addMouseListener(this); | ||
| + | setPreferredSize(new Dimension(450, | ||
| + | setBorder(BorderFactory.createEmptyBorder(20, | ||
| + | } | ||
| + | |||
| + | void eventOutput(String eventDescription, | ||
| + | textArea.append(eventDescription + " detected on " | ||
| + | + e.getComponent().getClass().getName() | ||
| + | + " | ||
| + | textArea.setCaretPosition(textArea.getDocument().getLength()); | ||
| + | } | ||
| + | |||
| + | public void mousePressed(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | + e.getClickCount() + " | ||
| + | } | ||
| + | |||
| + | public void mouseReleased(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | + e.getClickCount() + " | ||
| + | } | ||
| + | |||
| + | public void mouseEntered(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | } | ||
| + | |||
| + | public void mouseExited(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | } | ||
| + | |||
| + | public void mouseClicked(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | + e.getClickCount() + " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Από τις μεθόδους του παραπάνω interface, αλλά και από | ||
| + | <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. | ||
| + | </ | ||
| + | |||
| + | ===== MouseMotionListener Interface ===== | ||
| + | |||
| + | Οι μέθοδοι που πρέπει να υποστηρίζει κάθε αντικείμενο που υλοποιεί το interface // | ||
| <code java> | <code java> | ||
| void mouseDragged(MouseEvent e) | void mouseDragged(MouseEvent e) | ||
| Line 24: | Line 160: | ||
| void mouseMoved(MouseEvent e) | void mouseMoved(MouseEvent e) | ||
| //Invoked when the mouse cursor has been moved onto a component but no buttons have been pushed. | //Invoked when the mouse cursor has been moved onto a component but no buttons have been pushed. | ||
| + | </ | ||
| + | Παρακάτω δίνεται ένα παράδειγμα από το 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(" | ||
| + | | ||
| + | public static void main(String[] args) { | ||
| + | /* Use an appropriate Look and Feel */ | ||
| + | try { | ||
| + | // | ||
| + | // | ||
| + | UIManager.setLookAndFeel(" | ||
| + | } catch (UnsupportedLookAndFeelException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } catch (IllegalAccessException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } catch (InstantiationException ex) { | ||
| + | |||
| + | ex.printStackTrace(); | ||
| + | } catch (ClassNotFoundException ex) { | ||
| + | ex.printStackTrace(); | ||
| + | } | ||
| + | /* Turn off metal' | ||
| + | UIManager.put(" | ||
| + | | ||
| + | //Schedule a job for the event dispatch thread: | ||
| + | //creating and showing this application' | ||
| + | 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(" | ||
| + | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| + | | ||
| + | //Create and set up the content pane. | ||
| + | JComponent newContentPane = new MouseMotionEventDemo(); | ||
| + | newContentPane.setOpaque(true); | ||
| + | frame.setContentPane(newContentPane); | ||
| + | | ||
| + | //Display the window. | ||
| + | frame.pack(); | ||
| + | frame.setVisible(true); | ||
| + | } | ||
| + | | ||
| + | public MouseMotionEventDemo() { | ||
| + | super(new GridLayout(0, | ||
| + | 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, | ||
| + | | ||
| + | add(scrollPane); | ||
| + | | ||
| + | //Register for mouse events on blankArea and panel. | ||
| + | blankArea.addMouseMotionListener(this); | ||
| + | addMouseMotionListener(this); | ||
| + | | ||
| + | setPreferredSize(new Dimension(450, | ||
| + | setBorder(BorderFactory.createEmptyBorder(20, | ||
| + | } | ||
| + | | ||
| + | void eventOutput(String eventDescription, | ||
| + | textArea.append(eventDescription | ||
| + | + " (" + e.getX() + "," | ||
| + | + " detected on " | ||
| + | + e.getComponent().getClass().getName() | ||
| + | + NEWLINE); | ||
| + | textArea.setCaretPosition(textArea.getDocument().getLength()); | ||
| + | } | ||
| + | | ||
| + | public void mouseMoved(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | } | ||
| + | | ||
| + | public void mouseDragged(MouseEvent e) { | ||
| + | eventOutput(" | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| + | Από το παραπάνω παράδειγμα μπορείτε να δείτε | ||
| + | - Πως μπορείτε να πάρετε την θέση του ποντικιού μετά από κάθε //event// ('' | ||
| + | - Πως μπορείτε να δείτε με ποιο Swing component συνδέεται το συγκεκριμένο //event// ('' | ||
swing/mouse_events.1431813704.txt.gz · Last modified: 2015/05/16 21:01 (external edit)
