您的位置:首页 > 其它

日常笔记之事件驱动

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

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语言程序设计(基础篇)原书第八版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: