Board logo

標題: 滑鼠事件 [打印本頁]

作者: tonyh    時間: 2017-6-16 21:30     標題: 滑鼠事件

本帖最後由 tonyh 於 2019-5-25 14:21 編輯

一、滑鼠事件說明
視窗應用程式中,滑鼠是最常使用的輸入工具。Java用滑鼠來處理觸發事件的傾聽機制,方式有「實作MouseListener介面」、「繼承MouseAdapter類別」、「實作MouseMotionListener介面」、「繼承MouseMotionAdapter類別」,在本單元我們將練習實作MouseListener介面。

二、MouseListener介面與MouseAdapter類別皆提供了五個滑鼠事件處理方法
1. void mouseClicked(MouseEvent e)
 當滑鼠鍵被按一下時所觸發的事件,包括按下及放開的過程。
2. void mousePressed(MouseEvent e)
 當滑鼠鍵被按下時所觸發的事件。
3. void mouseReleased(MouseEvent e)
 當已按下的滑鼠鍵被放開時所觸發的事件。
4. void mouseEntered(MouseEvent e)
 當滑鼠指標移入來源物件時所觸發的事件。
5. void mouseExited(MouseEvent e)
 當滑鼠指標從來源物件移出來時所觸發的事件。

三、MouseMotionListener介面與MouseMotionAdapter類別皆提供了二個滑鼠事件處理方法
1. void mouseMoved(MouseEvent e)
 當滑鼠指標在來源物件內移動時所觸發的事件。
2. void mouseDragged(MouseEvent e)
 當滑鼠指標拖曳來源物件時所觸發的事件。

四、MouseEvent類別常用的方法
1. int getX()
 傳回滑鼠指標在視窗物件內的水平座標。
2. int getY()
 傳回滑鼠指標在視窗物件內的垂直座標。
3. int getClickCount()
 傳回滑鼠鍵被按了幾下。
4. int getButton()
 傳回滑鼠被按下或放開的鍵是哪一個按鍵。若傳回1,表示左鍵;傳回2,表示中鍵;傳回3,表示右鍵。

五、實作MouseListener介面
滑鼠事件的「事件來源」就是視窗物件,因此要使用 addMouseListener(this) 敘述將視窗物件與滑鼠事件傾聽者連結在一起。

實作點擊滑鼠左鍵1次後,圖片左上角對準至滑鼠指標位置.


實作點擊滑鼠左鍵2次後,圖片正中央對準至滑鼠指標位置.
  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.MouseListener;
  5. import java.awt.event.MouseEvent;

  6. public class Ch98 implements MouseListener{
  7.         
  8.     private JFrame fm;
  9.     private JLabel lb;
  10.     private ImageIcon icon,target;
  11.     private int x=100,y=100;
  12.         
  13.     Ch98()
  14.     {
  15.         icon=new ImageIcon(Ch98.class.getResource("pic/star.png"));
  16.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  17.                
  18.         lb=new JLabel(target);
  19.         lb.setBounds(x, y, 128, 128);
  20.                
  21.         fm=new JFrame("滑鼠指標牽引圖形");
  22.         fm.setBounds(100, 100, 420, 320);
  23.         fm.setIconImage(icon.getImage());
  24.         fm.setVisible(true);
  25.         fm.setResizable(false);
  26.         fm.setLayout(null);
  27.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.         fm.add(lb);
  29.         fm.addMouseListener(this);
  30.     }
  31.         
  32.     public void mousePressed(MouseEvent e)
  33.     {
  34.         if(e.getClickCount()==1)
  35.         {
  36.             x=e.getX()-3;
  37.             y=e.getY()-25;
  38.         }
  39.         if(e.getClickCount()==2)
  40.         {
  41.             x=e.getX()-3-64;
  42.             y=e.getY()-25-64;
  43.         }
  44.         lb.setLocation(x, y);
  45.     }
  46.     public void mouseReleased(MouseEvent e){}
  47.         
  48.     public void mouseClicked(MouseEvent e){}
  49.         
  50.     public void mouseEntered(MouseEvent e){}
  51.         
  52.     public void mouseExited(MouseEvent e){}

  53.     public static void main(String[] args) {
  54.         new Ch98();
  55.     }

  56. }
複製代碼


作者: 洪振庭    時間: 2017-6-23 17:56

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.*;
  5. public class Ch98 implements MouseListener{
  6.         
  7.     private JFrame fm;
  8.     private JLabel lb;
  9.     private ImageIcon icon,target;
  10.     private int x=100,y=100;
  11.         
  12.     Ch98()
  13.     {
  14.         icon=new ImageIcon(Ch98.class.getResource("pic/star.png"));
  15.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  16.                
  17.         lb=new JLabel(target);
  18.         lb.setBounds(x, y, 128, 128);
  19.                
  20.         fm=new JFrame("滑鼠指標牽引圖形");
  21.         fm.setBounds(100, 100, 420, 320);
  22.         fm.setIconImage(icon.getImage());
  23.         fm.setVisible(true);
  24.         fm.setResizable(false);
  25.         fm.setLayout(null);
  26.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  27.         fm.add(lb);
  28.         fm.addMouseListener(this);
  29.     }
  30.         
  31.     public void mousePressed(MouseEvent e)
  32.     {
  33.         if(e.getClickCount()==1)
  34.         {
  35.             x=e.getX()-3;
  36.             y=e.getY()-25;
  37.         }
  38.         if(e.getClickCount()==2)
  39.         {
  40.             x=e.getX()-3-64;
  41.             y=e.getY()-25-64;
  42.         }
  43.         lb.setLocation(x, y);
  44.     }
  45.   
  46.     public static void main(String[] args) {
  47.         new Ch98();
  48.     }

  49. }
複製代碼

作者: 梁和雋    時間: 2017-6-23 20:12

  1. import javax.swing.*;
  2. import java.awt.event.*;

  3. public class Ch01 implements MouseListener{
  4.         
  5.     private JFrame fm;
  6.     private JLabel lb;
  7.     private ImageIcon icon,target;
  8.     private int x=100,y=100;
  9.         
  10.     Ch01()
  11.     {
  12.         icon=new ImageIcon(Ch01.class.getResource("pic/star.png"));
  13.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  14.                
  15.         lb=new JLabel(target);
  16.         lb.setBounds(x, y, 128, 128);
  17.                
  18.         fm=new JFrame("滑鼠指標牽引圖形");
  19.         fm.setBounds(100, 100, 420, 320);
  20.         fm.setIconImage(icon.getImage());
  21.         fm.setVisible(true);
  22.         fm.setResizable(false);
  23.         fm.setLayout(null);
  24.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.         fm.add(lb);
  26.         fm.addMouseListener(this);
  27.     }
  28.         
  29.     public void mousePressed(MouseEvent e)
  30.     {
  31.         if(e.getClickCount()==1)
  32.         {
  33.             x=e.getX()-3;
  34.             y=e.getY()-25;
  35.         }
  36.         if(e.getClickCount()==2)
  37.         {
  38.             x=e.getX()-3-64;
  39.             y=e.getY()-25-64;
  40.         }
  41.         lb.setLocation(x, y);
  42.     }
  43.     public void mouseReleased(MouseEvent e){}
  44.         
  45.     public void mouseClicked(MouseEvent e){}
  46.         
  47.     public void mouseEntered(MouseEvent e){}
  48.         
  49.     public void mouseExited(MouseEvent e){}

  50.     public static void main(String[] args) {
  51.         new Ch01();
  52.     }

  53. }
複製代碼

作者: 黃璽安    時間: 2017-6-23 20:13

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.MouseListener;
  5. import java.awt.event.MouseEvent;

  6. public class Ch98 implements MouseListener{
  7.         
  8.     private JFrame fm;
  9.     private JLabel lb;
  10.     private ImageIcon icon,target;
  11.     private int x=100,y=100;
  12.         
  13.     Ch98()
  14.     {
  15.         icon=new ImageIcon(Ch98.class.getResource("pic/star.png"));
  16.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  17.                
  18.         lb=new JLabel(target);
  19.         lb.setBounds(x, y, 128, 128);
  20.                
  21.         fm=new JFrame("滑鼠指標牽引圖形");
  22.         fm.setBounds(100, 100, 420, 320);
  23.         fm.setIconImage(icon.getImage());
  24.         fm.setVisible(true);
  25.         fm.setResizable(false);
  26.         fm.setLayout(null);
  27.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.         fm.add(lb);
  29.         fm.addMouseListener(this);
  30.     }
  31.         
  32.     public void mousePressed(MouseEvent e)
  33.     {
  34.         if(e.getClickCount()==1)
  35.         {
  36.             x=e.getX()-3;
  37.             y=e.getY()-25;
  38.         }
  39.         if(e.getClickCount()==2)
  40.         {
  41.             x=e.getX()-3-64;
  42.             y=e.getY()-25-64;
  43.         }
  44.         lb.setLocation(x, y);
  45.     }
  46.     public void mouseReleased(MouseEvent e){}
  47.         
  48.     public void mouseClicked(MouseEvent e){}
  49.         
  50.     public void mouseEntered(MouseEvent e){}
  51.         
  52.     public void mouseExited(MouseEvent e){}

  53.     public static void main(String[] args) {
  54.         new Ch98();
  55.     }

  56. }
複製代碼

作者: 陳思惟    時間: 2017-6-23 20:13

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.MouseListener;
  5. import java.awt.event.MouseEvent;

  6. public class Ch98 implements MouseListener{
  7.         
  8.     private JFrame fm;
  9.     private JLabel lb;
  10.     private ImageIcon icon,target;
  11.     private int x=100,y=100;
  12.         
  13.     Ch98()
  14.     {
  15.         icon=new ImageIcon(Ch98.class.getResource("pic/star.png"));
  16.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  17.                
  18.         lb=new JLabel(target);
  19.         lb.setBounds(x, y, 128, 128);
  20.                
  21.         fm=new JFrame("滑鼠指標牽引圖形");
  22.         fm.setBounds(100, 100, 420, 320);
  23.         fm.setIconImage(icon.getImage());
  24.         fm.setVisible(true);
  25.         fm.setResizable(false);
  26.         fm.setLayout(null);
  27.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.         fm.add(lb);
  29.         fm.addMouseListener(this);
  30.     }
  31.         
  32.     public void mousePressed(MouseEvent e)
  33.     {
  34.         if(e.getClickCount()==1)
  35.         {
  36.             x=e.getX()-3;
  37.             y=e.getY()-25;
  38.         }
  39.         if(e.getClickCount()==2)
  40.         {
  41.             x=e.getX()-3-64;
  42.             y=e.getY()-25-64;
  43.         }
  44.         lb.setLocation(x, y);
  45.     }
  46.     public void mouseReleased(MouseEvent e){}
  47.         
  48.     public void mouseClicked(MouseEvent e){}
  49.         
  50.     public void mouseEntered(MouseEvent e){}
  51.         
  52.     public void mouseExited(MouseEvent e){}

  53.     public static void main(String[] args) {
  54.         new Ch98();
  55.     }

  56. }
複製代碼

作者: 曾挺桂    時間: 2017-6-23 20:42

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.MouseListener;
  5. import java.awt.event.MouseEvent;

  6. public class Ch98 implements MouseListener{
  7.         
  8.     private JFrame fm;
  9.     private JLabel lb;
  10.     private ImageIcon icon,target;
  11.     private int x=100,y=100;
  12.         
  13.     Ch98()
  14.     {
  15.         icon=new ImageIcon(Ch98.class.getResource("pic/star.png"));
  16.         target=new ImageIcon(Ch98.class.getResource("pic/santa.png"));
  17.                
  18.         lb=new JLabel(target);
  19.         lb.setBounds(x, y, 128, 128);
  20.                
  21.         fm=new JFrame("滑鼠指標牽引圖形");
  22.         fm.setBounds(100, 100, 420, 320);
  23.         fm.setIconImage(icon.getImage());
  24.         fm.setVisible(true);
  25.         fm.setResizable(false);
  26.         fm.setLayout(null);
  27.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.         fm.add(lb);
  29.         fm.addMouseListener(this);
  30.     }
  31.         
  32.     public void mousePressed(MouseEvent e)
  33.     {
  34.         if(e.getClickCount()==1)
  35.         {
  36.             x=e.getX()-3;
  37.             y=e.getY()-25;
  38.         }
  39.         if(e.getClickCount()==2)
  40.         {
  41.             x=e.getX()-3-64;
  42.             y=e.getY()-25-64;
  43.         }
  44.         lb.setLocation(x, y);
  45.     }
  46.     public void mouseReleased(MouseEvent e){}
  47.         
  48.     public void mouseClicked(MouseEvent e){}
  49.         
  50.     public void mouseEntered(MouseEvent e){}
  51.         
  52.     public void mouseExited(MouseEvent e){}

  53.     public static void main(String[] args) {
  54.         new Ch98();
  55.     }

  56. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2