Board logo

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

作者: tonyh    時間: 2015-9-5 15:32     標題: 滑鼠事件

本帖最後由 tonyh 於 2015-10-3 13:50 編輯

一、滑鼠事件說明
視窗應用程式中,滑鼠是最常使用的輸入工具。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次後,圖片左上角對準至滑鼠指標位置.
[attach]1392[/attach]

實作點擊滑鼠左鍵2次後,圖片正中央對準至滑鼠指標位置.
[attach]1393[/attach]
  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 Ch87 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.     Ch87()
  14.     {
  15.         icon=new ImageIcon(Ch87.class.getResource("pic/star.png"));
  16.         target=new ImageIcon(Ch87.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.         Ch87 app=new Ch87();
  55.     }

  56. }
複製代碼

作者: 許逸群    時間: 2015-9-19 14:46

  1. import javax.swing.*;
  2. public class Ch87 {

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

  52.         }
複製代碼

作者: 林以諾    時間: 2015-9-19 14:48

  1. package ch87;
  2. import javax.swing.*;
  3. public class ch87 {

  4.         public static void main(String[] args) {
  5.                 private JFrame fm;
  6.                 private JLabel lb;
  7.                 private ImageIcon icon,target;
  8.                 private int x=100, y=100;
  9.                
  10.                
  11.                 ch87()
  12.                 {
  13.                         icon=new ImageIcon(Ch87.class.getResource("pic/star.png"));
  14.                         target=new ImageIcon(Ch87.class.getResource("pic/star.png"));
  15.                         
  16.                         lb=new JLabel(target);
  17.                         lb.setBounds(x, y, 128, 128);
  18.                         
  19.                         fm=new JFrame("滑鼠指標牽引圖形");
  20.                         fm.setBounds(100, 100, 420, 320);
  21.                         fm.setIconImage(icon.getImage());
  22.                         fm.setVisible(true);
  23.                         fm.setResizable(false);
  24.                         fm.setLayout(null);
  25.                         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.                         fm.add(lb);
  27.                         fm.addMouseListener(this);
  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)()==1)
  37.                     {
  38.                          x=e.getX()-3-64;
  39.                          y=e.getY()-25-64;                 
  40.                     }
  41.                     lb.setLocation(x, y);
  42.                 }
  43.                 public void mouseRleased(mouseEvent e){}
  44.                
  45.                 public void mouseClicked(mouseEvent e){}
  46.                
  47.                 public void mouseEntered(mouseEvent e){}
  48.                
  49.                 public void mouseExcited(mouseEvent e){}
  50.                
  51.                 public static void main(String[] args){
  52.                         ch87 app=new ch87();
  53.             }

  54.         }
複製代碼

作者: 張瀚仁    時間: 2015-9-19 14:59

  1. import javax.swing.*;
  2. public class ch87 {

  3.         public static void main(String[] args) {
  4.                 private JFrame fm;
  5.                 private JLabel lb;
  6.                 private ImageIcon icon,target;
  7.                 private int x=100, y=100;
  8.                
  9.                
  10.                 ch87()
  11.                 {
  12.                         icon=new ImageIcon(Ch87.class.getResource("pic/star.png"));
  13.                         target=new ImageIcon(Ch87.class.getResource("pic/star.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.                 public void mousePressed(MouseEvent e);
  29.                 {
  30.                     if(e.getClickCount)()==1)
  31.                     {
  32.                          x=e.getX()-3;
  33.                          y=e.getY()-25;                 
  34.                     }
  35.                     if(e.getClickCount)()==1)
  36.                     {
  37.                          x=e.getX()-3-64;
  38.                          y=e.getY()-25-64;                 
  39.                     }
  40.                     lb.setLocation(x, y);
  41.                 }
  42.                 public void mouseRleased(mouseEvent e){}
  43.                
  44.                 public void mouseClicked(mouseEvent e){}
  45.                
  46.                 public void mouseEntered(mouseEvent e){}
  47.                
  48.                 public void mouseExcited(mouseEvent e){}
  49.                
  50.                 public static void main(String[] args){
  51.                         ch87 app=new ch87();
  52.             }

  53.         }
複製代碼

作者: 劉泳鱔    時間: 2015-9-19 15:04

  1. import javax.swing.*;
  2. public class ch87 {

  3.         public static void main(String[] args) {
  4.                 private JFrame fm;
  5.                 private JLabel lb;
  6.                 private ImageIcon icon,target;
  7.                 private int x=100, y=100;
  8.                
  9.                
  10.                 ch87()
  11.                 {
  12.                         icon=new ImageIcon(Ch87.class.getResource("pic/star.png"));
  13.                         target=new ImageIcon(Ch87.class.getResource("pic/star.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.                 public void mousePressed(MouseEvent e);
  29.                 {
  30.                     if(e.getClickCount)()==1)
  31.                     {
  32.                          x=e.getX()-3;
  33.                          y=e.getY()-25;                 
  34.                     }
  35.                     if(e.getClickCount)()==1)
  36.                     {
  37.                          x=e.getX()-3-64;
  38.                          y=e.getY()-25-64;                 
  39.                     }
  40.                     lb.setLocation(x, y);
  41.                 }
  42.                 public void mouseRleased(mouseEvent e){}
  43.                
  44.                 public void mouseClicked(mouseEvent e){}
  45.                
  46.                 public void mouseEntered(mouseEvent e){}
  47.                
  48.                 public void mouseExcited(mouseEvent e){}
  49.                
  50.                 public static void main(String[] args){
  51.                         ch87 app=new ch87();
  52.             }

  53.         }
複製代碼





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