【例9.24】综合鼠标事件和键盘事件处理的程序,模拟一个电子白板,可以用鼠标在上面绘画,可用键盘在上面写字。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MouseAndKeyDemo extends JApplet { protected int lastX = 0, lastY = 0; public void init() { setBackground(Color.white); setForeground(Color.blue); addMouseListener(new PositionRecorder()); addMouseMotionListener(new LineDrawer()); addKeyListener(new CharDrawer()); } protected void record(int x, int y) { lastX = x; lastY = y; } private class PositionRecorder extends MouseAdapter{ public void mouseEntered(MouseEvent e) { requestFocus(); record(e.getX(), e.getY()); } public void mousePressed(MouseEvent e) { record(e.getX(), e.getY()); } } private class LineDrawer extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { int x = e.getX(),y = e.getY(); Graphics g = getGraphics(); g.drawLine(lastX, lastY, x, y); record(x, y); } } private class CharDrawer extends KeyAdapter { public void keyTyped(KeyEvent event) { String s = String.valueOf(event.getKeyChar()); getGraphics().drawString(s, lastX, lastY); record(lastX + 11, lastY); } } } 程序中,在类MouseAndKeyDemo中定义了三个私有嵌套类,两个类对鼠标事件进行处理,一个类对键盘事件进行处理。 程序的运行情况如下图所示。图中的线用鼠标随手画出,文字用键盘输入 【JAVA中的图形用户界面示例】是一个典型的GUI(图形用户界面)编程实例,它使用了Java的`javax.swing`和`java.awt`包中的类来创建一个交互式的电子白板应用。这个应用允许用户通过鼠标绘画线条,以及通过键盘输入文字。 该程序创建了一个名为`MouseAndKeyDemo`的`JApplet`子类,这是Swing库中的一个组件,用于在Web页面中展示图形用户界面。在这个类中,定义了三个私有内部类:`PositionRecorder`、`LineDrawer`和`CharDrawer`,分别对应鼠标事件和键盘事件的处理。 1. `PositionRecorder`类扩展了`MouseAdapter`,它实现了鼠标进入和按下事件的处理。当鼠标进入applet区域,它请求获取焦点,以便接收键盘事件;当鼠标按下时,记录下鼠标的位置。 2. `LineDrawer`类继承自`MouseMotionAdapter`,处理鼠标拖动事件。当鼠标在屏幕上被拖动时,程序会在上次记录的鼠标位置和当前位置之间画一条线,然后更新最后一次记录的位置。 3. `CharDrawer`类是`KeyAdapter`的子类,处理键盘的字符输入事件。每当用户键入一个字符,该字符就会在上次鼠标点击的位置画出来,并将光标位置向右移动11个单位,以便于下一次输入。 这些监听器类通过`addMouseListener`、`addMouseMotionListener`和`addKeyListener`方法注册到`JApplet`实例上,使得它们可以响应相应的事件。 在Java AWT和Swing中,容器(如`JApplet`)可以包含多个组件,并且可以设置布局管理器来决定这些组件在容器内的排列方式。在这个例子中,虽然没有明确提及布局管理器,但默认情况下`JApplet`使用`FlowLayout`,它会按顺序从左到右、从上到下放置组件。 此外,`getGraphics()`方法被用来获取`JApplet`的绘图上下文,通过它可以进行图形绘制,如画线和字符串。然而,这种方法并不推荐,因为`Graphics`对象可能会被重绘时释放,导致绘制的结果不持久。通常,应使用组件的绘制方法(如`paintComponent`)来确保绘制操作在每次重绘时都会执行。 总结一下,这个示例展示了如何使用Java的AWT和Swing库来创建一个具有鼠标和键盘交互功能的GUI应用。它利用了事件监听器和适配器模式,实现了用户输入的捕获和响应,同时演示了基本的图形绘制。在实际开发中,这样的技术可以应用于各种复杂的桌面应用,如绘图软件、游戏或者其他需要用户交互的场景。
剩余63页未读,继续阅读
- SSSummering1142014-03-31资源可用,有一定参考价值,谢谢
- 粉丝: 2
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《能源转型投资展望:2025年及长远规划》.pdf
- PPTAAD DADAA
- SM2258XT-BGA144-4BGA180-6L-R1019 三星KLUCG4J1CB B0B1颗粒开盘工具 , EC, 3A, 94, 43, A4, CA 七彩虹SL300这个固件有用
- 基于Java开发的日程管理FlexTime应用设计源码
- 基于JavaScript、CSS、HTML的简易DOM版飞机游戏设计源码
- 【C++初级程序设计·配套源码】第1期-语法基础
- 基于华为消费者业务官网的仿制前端首页设计源码
- 影驰战将PS3111 东芝芯片TT18G23AIN开卡成功分享,图片里面画线的选项很重要
- 基于Java和Vue的kopsoftKANBAN车间电子看板设计源码
- 基于Go语言的SharpWxDump微信取证信息分析设计源码
- 基于C语言的USB光盘资料操作教学源码
- 基于GitHub的TypeScript文档中文翻译设计源码
- 【C++初级程序设计·配套源码】第2期-基本数据类型
- 基于Vue和SpringBoot的企业员工管理系统2.0版本设计源码
- 没用333333333333333333333333333333
- C++ STL 高级教程深入浅出版.zip