日常筆記之事件驅動

今天看了事件驅動程序,敲了兩個示例,想着能不能把按鍵事件和鼠標事件使用在同一個對象上。於是在示例代碼上增加了一點改動。

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

public class Test extends JFrame {
    private KeyboardPanel keyboardPanel = new KeyboardPanel();//創建KeyboardPanel的對象

    public Test() {
        add(keyboardPanel);
        keyboardPanel.setFocusable(true);
    }

    public static void main(String[] args) {
        Test frame = new Test();
        frame.setTitle("TEST");
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    static class KeyboardPanel extends JPanel {
        private int x = 100;
        private int y = 100;
        private char keyChar = 'A';

        //KeyboardPanel的無參構造方法
        public KeyboardPanel() {

            //註冊按鍵事件的匿名類監聽器
            addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    switch (e.getKeyCode()) {
                    case KeyEvent.VK_DOWN:
                        y += 10;
                        break;
                    case KeyEvent.VK_UP:
                        y -= 10;
                        break;
                    case KeyEvent.VK_LEFT:
                        x -= 10;
                        break;
                    case KeyEvent.VK_RIGHT:
                        x += 10;
                        break;
                    default:
                        keyChar = e.getKeyChar();
                    }
                    repaint();
                }
            });


            //註冊鼠標事件的匿名類監聽器
            addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseDragged(MouseEvent e) {
                    x = e.getX();
                    y = e.getY();
                    repaint();//調用該方法會導致paintComponent方法被調用,這樣就會在該位置顯示新信息;因爲component中己有的圖形發生變化後不會立刻顯示,須使用repaint方法。
                }
            });
        }

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setFont(new Font("TimesRoman", Font.PLAIN, 24));
            g.drawString(String.valueOf(keyChar), x, y);
        }
    }

}

好了,現在的效果就是可以用鼠標或者方向鍵來移動所輸入的字符串位置。

參考:JAVA語言程序設計(基礎篇)原書第八版

發佈了26 篇原創文章 · 獲贊 28 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章