Board logo

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

作者: 周政輝    時間: 2018-3-3 11:30     標題: 滑鼠事件

一、滑鼠事件說明
視窗應用程式中,滑鼠是最常使用的輸入工具。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]3471[/attach]
[attach]3472[/attach]
作者: 黃茂勛    時間: 2018-3-3 11:48

  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;
  4. import java.awt.Image;

  5. import javax.swing.ImageIcon;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. import javax.swing.border.EmptyBorder;
  9. import javax.swing.JLabel;
  10. import java.awt.event.MouseAdapter;
  11. import java.awt.event.MouseEvent;

  12. public class Main extends JFrame {

  13.         private JPanel contentPane;
  14.         private int x2, y2;

  15.         public static void main(String[] args) {
  16.                 EventQueue.invokeLater(new Runnable() {
  17.                         public void run() {
  18.                                 try {
  19.                                         Main frame = new Main();
  20.                                         frame.setVisible(true);
  21.                                 } catch (Exception e) {
  22.                                         e.printStackTrace();
  23.                                 }
  24.                         }
  25.                 });
  26.         }
  27.         public Main() {
  28.                
  29.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  30.                 setBounds(100, 100, 450, 379);
  31.                 contentPane = new JPanel();
  32.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  33.                 setContentPane(contentPane);
  34.                 contentPane.setLayout(null);
  35.                
  36.                 ImageIcon icon = new ImageIcon(Main.class.getResource("l02.png"));
  37.                
  38.                 JLabel lblNewLabel = new JLabel();
  39.                 lblNewLabel.setBounds(165, 132, 117, 102);
  40.                 lblNewLabel.setIcon(icon);
  41.                 addMouseListener(new MouseAdapter() {
  42.                         public void mousePressed(MouseEvent e) {
  43.                                 x2 = e.getX()-50;
  44.                                 y2 = e.getY()-70;
  45.                                 if(e.getButton() == 1)
  46.                                         lblNewLabel.setLocation(x2, y2);                       
  47.                         }
  48.                 });
  49.                 contentPane.add(lblNewLabel);
  50.         }
  51. }
複製代碼

作者: 蔡季樺    時間: 2018-3-3 11:50

  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;

  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import javax.swing.ImageIcon;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;

  11. public class Main extends JFrame {

  12.         private JPanel contentPane;
  13.         private int x,y;

  14.         /**
  15.          * Launch the application.
  16.          */
  17.         public static void main(String[] args) {
  18.                 EventQueue.invokeLater(new Runnable() {
  19.                         public void run() {
  20.                                 try {
  21.                                         Main frame = new Main();
  22.                                         frame.setVisible(true);
  23.                                 } catch (Exception e) {
  24.                                         e.printStackTrace();
  25.                                 }
  26.                         }
  27.                 });
  28.         }

  29.         /**
  30.          * Create the frame.
  31.          */
  32.         public Main() {
  33.                
  34.                
  35.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  36.                 setBounds(100, 100, 450, 300);
  37.                 contentPane = new JPanel();
  38.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  39.                 setContentPane(contentPane);
  40.                 contentPane.setLayout(null);
  41.                
  42.                 JLabel lblNewLabel = new JLabel("New label");
  43.                 lblNewLabel.setIcon(new ImageIcon(Main.class.getResource("/bbs/istak/org/tw/kd001.png")));
  44.                 lblNewLabel.setBounds(114, 83, 102, 102);
  45.                 contentPane.add(lblNewLabel);
  46.                
  47.                 addMouseListener(new MouseAdapter() {
  48.                         @Override
  49.                         public void mouseClicked(MouseEvent arg0) {
  50.                                 x = arg0.getX();
  51.                                 y = arg0.getY();
  52.                                 lblNewLabel.setLocation(x-51,y-51);
  53.                         }
  54.                 });
  55.                
  56.                
  57.                
  58.                
  59.         }
  60. }
複製代碼

作者: 蔡庭豪    時間: 2018-3-3 12:01

  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;
  4. import java.awt.Image;

  5. import javax.swing.ImageIcon;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. import javax.swing.border.EmptyBorder;
  9. import javax.swing.JLabel;
  10. import java.awt.event.MouseAdapter;
  11. import java.awt.event.MouseEvent;

  12. public class Amove extends JFrame {

  13.         private JPanel contentPane;
  14.         private ImageIcon icon;
  15.         /**
  16.          * Launch the application.
  17.          */
  18.         public static void main(String[] args) {
  19.                 EventQueue.invokeLater(new Runnable() {
  20.                         public void run() {
  21.                                 try {
  22.                                         Amove frame = new Amove();
  23.                                         frame.setVisible(true);
  24.                                 } catch (Exception e) {
  25.                                         e.printStackTrace();
  26.                                 }
  27.                         }
  28.                 });
  29.         }

  30.         /**
  31.          * Create the frame.
  32.          */
  33.         public Amove() {
  34.                
  35.                
  36.                 icon = new ImageIcon(crocodile.class.getResource("A-icon.png"));
  37.         Image img = icon.getImage().getScaledInstance(32,32,java.awt.Image.SCALE_FAST );
  38.         ImageIcon newicon = new ImageIcon(img);
  39.                
  40.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  41.                 setBounds(100, 100, 450, 300);
  42.                 contentPane = new JPanel();
  43.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  44.                 setContentPane(contentPane);
  45.                 contentPane.setLayout(null);
  46.                
  47.                 JLabel Alabel = new JLabel(newicon);
  48.                 Alabel.setBounds(144, 70, 32, 32);
  49.                 contentPane.add(Alabel);
  50.                
  51.                 addMouseListener(new MouseAdapter() {
  52.                         @Override
  53.                         public void mousePressed(MouseEvent arg0) {
  54.                                 int x = arg0.getX();
  55.                                 int y = arg0.getY();
  56.                                 Alabel.setLocation(x, y);
  57.                         }
  58.                 });
  59.         }

  60. }
複製代碼

作者: 張健勳    時間: 2018-3-4 21:48

本帖最後由 張健勳 於 2018-3-4 22:22 編輯
  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;

  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import java.awt.Toolkit;
  9. import javax.swing.ImageIcon;
  10. import java.awt.event.MouseAdapter;
  11. import java.awt.event.MouseEvent;

  12. public class Main extends JFrame {

  13.         private JPanel contentPane;
  14.         private int x,y;

  15.         /**
  16.          * Launch the application.
  17.          */
  18.         public static void main(String[] args) {
  19.                 EventQueue.invokeLater(new Runnable() {
  20.                         public void run() {
  21.                                 try {
  22.                                         Main frame = new Main();
  23.                                         frame.setVisible(true);
  24.                                 } catch (Exception e) {
  25.                                         e.printStackTrace();
  26.                                 }
  27.                         }
  28.                 });
  29.         }

  30.         /**
  31.          * Create the frame.
  32.          */
  33.         public Main() {
  34.                 setIconImage(Toolkit.getDefaultToolkit().getImage(Main.class.getResource("icon.png")));
  35.                 setTitle("\u6ED1\u9F20\u6307\u6A19\u727D\u5F15\u5716\u6848");
  36.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37.                 setBounds(100, 100, 450, 300);
  38.                 contentPane = new JPanel();
  39.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  40.                 setContentPane(contentPane);
  41.                 contentPane.setLayout(null);
  42.                
  43.                 JLabel lb = new JLabel("");
  44.                
  45.                
  46.                 addMouseListener(new MouseAdapter() {
  47.                         @Override
  48.                         public void mouseClicked(MouseEvent a) {
  49.                                 x = a.getX();
  50.                                 y = a.getY();
  51.                                
  52.                                
  53.                                 lb.setLocation(x,y);
  54.                                
  55.                         }
  56.                 });
  57.                
  58.                
  59.                 lb.setIcon(new ImageIcon(Main.class.getResource("icon.png")));
  60.                 lb.setBounds(10, 10, 89, 79);
  61.                 contentPane.add(lb);

  62.         }
  63. }
複製代碼





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