Board logo

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

作者: tonyh    時間: 2020-3-9 19:58     標題: 滑鼠事件

一、滑鼠事件說明
視窗應用程式中,滑鼠是最常使用的輸入工具。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. }
複製代碼


作者: 李沛昂    時間: 2020-3-9 20:46

此帖僅作者可見
作者: 洪翊庭    時間: 2020-3-9 20:46

此帖僅作者可見
作者: 趙一鳴    時間: 2020-3-9 20:46

此帖僅作者可見
作者: 黃宇瑄    時間: 2020-3-9 20:47

此帖僅作者可見
作者: 戴嘉禾    時間: 2020-3-9 20:47

此帖僅作者可見
作者: 黃宇綸    時間: 2020-3-9 20:47

此帖僅作者可見
作者: 洪翊展    時間: 2020-3-9 20:49

此帖僅作者可見
作者: 鄭楀諺    時間: 2020-3-20 19:37

此帖僅作者可見




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