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)