日常笔记之事件驱动
2016-05-23 22:51
246 查看
今天看了事件驱动程序,敲了两个示例,想着能不能把按键事件和鼠标事件使用在同一个对象上。于是在示例代码上增加了一点改动。
好了,现在的效果就是可以用鼠标或者方向键来移动所输入的字符串位置。
参考:JAVA语言程序设计(基础篇)原书第八版
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语言程序设计(基础篇)原书第八版
相关文章推荐
- android开发笔记之PULL解析xml文件
- 阅读笔记1:fast tracking via spatio-temporal context learning
- Spring MVC使用指示符重定向
- java中的常见8种排序算法
- socket 学习笔记
- Octave 线性代数 行列式 1
- 五种I/O模型简述
- 格式化磁盘的简短代码
- C++第6次上机实验
- Nginx反向代理和负载均衡部署指南
- 第三章 经典场景设计
- python
- layer 调iframe
- Spark中组件Mllib的学习20之假设检验-卡方检验
- 第六届acm河南省赛——Card Trick 模拟
- C++拷贝构造函数(深拷贝,浅拷贝)
- 1.定义原型对象
- <FreeMark>FreeMark数据格式化
- 0523 Scrum 项目6.0
- Python基于HiRedis访问Redis