日常笔记之事件驱动

今天看了事件驱动程序,敲了两个示例,想着能不能把按键事件和鼠标事件使用在同一个对象上。于是在示例代码上增加了一点改动。

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语言程序设计(基础篇)原书第八版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值