Java Tutorial/Swing Event/MouseListener

Материал из Java эксперт
Перейти к: навигация, поиск

Drag and drop image

   <source lang="java">

import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.RepaintManager; public class DragImage extends JComponent implements MouseMotionListener {

 static int imageWidth = 60, imageHeight = 60;
 int imageX, imageY;
 Image image;
 public DragImage(Image i) {
   image = i;
   addMouseMotionListener(this);
 }
 public void mouseDragged(MouseEvent e) {
   imageX = e.getX();
   imageY = e.getY();
   repaint();
 }
 public void mouseMoved(MouseEvent e) {
 }
 public void paint(Graphics g) {
   Graphics2D g2 = (Graphics2D) g;
   g2.drawImage(image, imageX, imageY, this);
 }
 public static void main(String[] args) {
   String imageFile = "A.jpg";
   // Turn off double buffering
   RepaintManager.currentManager(null).setDoubleBufferingEnabled(false);
   Image image = Toolkit.getDefaultToolkit().getImage(DragImage.class.getResource(imageFile));
   image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_DEFAULT);
   JFrame frame = new JFrame("DragImage");
   frame.getContentPane().add(new DragImage(image));
   frame.setSize(300, 300);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setVisible(true);
 }

}</source>





MouseListener and MouseEvent

   <source lang="java">

/*

* Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   - Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*
*   - Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
*   - Neither the name of Sun Microsystems nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*

* MouseEventDemo.java
*/

import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; 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);
 }

} /*

* Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
* 
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*  - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*  - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*  - Neither the name of Sun Microsystems nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
* 
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

class BlankArea extends JLabel {

 Dimension minSize = new Dimension(100, 50);
 public BlankArea(Color color) {
   setBackground(color);
   setOpaque(true);
   setBorder(BorderFactory.createLineBorder(Color.black));
 }
 public Dimension getMinimumSize() {
   return minSize;
 }
 public Dimension getPreferredSize() {
   return minSize;
 }

}</source>





The MouseListener Interface

The MouseListener Interface: respond to events when the mouse cursor is moved into or out of the area occupied by a component, or one of the mouse buttons is pressed, released, or clicked.

Defined MethodsDescriptionmouseClicked(MouseEvent e)Called when a mouse button is clicked on a component - that is, when the button is pressed and releasedmousePressed(MouseEvent e)Called when a mouse button is pressed on a componentmouseReleased(MouseEvent e)Called when a mouse button is released on a componentmouseEntered(MouseEvent e)Called when the mouse enters the area occupied by a componentmouseExited(MouseEvent e)Called when the mouse exits the area occupied by a component