第08讲 JAVA中键盘和鼠标事件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Swing的基本规则
与AWT组件不同,Swing组件不能 直接添加到顶层容器中,它必须添加到一 个与Swing顶层容器相关联的内容面板 (content pane)上。内容面板是顶层 容器包含的一个普通容器,它是一个轻量 级组件。基本规则如下: (1)把Swing组件放入一个顶层 Swing容器的内容面板上 (2)避免使用非Swing的重量级组 件。
2、处理键盘输入的例子。例8.2
演示: MyKeyDemo1.java 可打印字符可使用getKeyChar() 返回; 控制字符使用getKeyCode() 返回;
窗口事件
1、WindowListener接口和WindowAdapter 类 对窗口的事件进行监视,如:窗口正在关闭、窗口关闭、窗 口被打开、窗口图标化、窗口非图标化、窗口应获得焦点而 成为当前窗口、窗口失去焦点而非激活等
Swing围绕着一个称为JComponent的组件 构建的,而JComponent则由AWT的容器类 扩展而来。
java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent
在KeyListener接口中的方法都有一个参数, 及KeyEvent类的对象。KeyEvent类中常用 的方法如下:
public int getKeyCode() 返回键盘事件中 相关键的整数类型键码。 public char getKeyChar() 返回键盘事件中 相关键的字符类型键码。例如,对于Shift+ a键返回的字符是A。 public static String getKeyText(inຫໍສະໝຸດ Baidu keyCode) 返回一个描述由参数int keyCode 确定的键的字符串,如Home、F1、A等。 public String paramString() 返回一个标识 该事件的参数字符串。
Swing是由100%纯Java实现的,Swing组件 是用Java实现的轻量级( light-weight)组件, 没有本地代码,不依赖操作系统的支持,这 是它与AWT组件的最大区别。 Swing在不同的平台上表现一致,并且有能力 提供本地窗口系统不支持的其它特性。 在AWT组件中,由于控制组件外观的对等类 与具体平台相关,使得AWT组件总是只有与 本机相关的外观。Swing使得程序在一个平台 上运行时能够有不同的外观。用户可以选择 自己习惯的外观。 (见下例)
在MouseListener接口和MouseMotionListener接 口中的所有方法中都有一个参数,它是鼠标事件类 MouseEvent的一个对象,当鼠标事件发生时.系统自 动生成一个该类的对象,在鼠标事件的处理方法中,经 常需在调用该类的方法来获得关于事件的一些信息。
MouseEvent类的常用方法如下: public int getX() 返回当前鼠标指针位置的x坐标值。 public int getY() 返回当前鼠标指针位置的y坐标值。 public int getClickCount() 返回事件中鼠标的点击次 数。 public String paramString() 返回一个标识该事件的字 符串。
演示:
SwingDemo1.java
键盘事件
1、KeyListener 接口和KeyAdapter 类 用于监听键盘事件的发生并将其传送到相应 的事件处理方法中去。 KeyListener接口能够监听的键盘事件有: 键按下(Pressed)、键释放(Released)及键的 按下并释放(Typed),相应的事件处理方法如 下: pubic void keyTyped(KeyEvent e) 当键盘上 的一个键被按下并释放后该方法被调用。 public void keyPressed(KeyEvent e) 当键盘 上的一个键盘被按下后该方法被调用。 public void keyReleased(KeyEvent e) 当键 盘上的一个键盘被释放时该方法被调用。
Swing中的大多数组件都是AWT组件名前面加了一
个"J"。
Swing包:
javax.swing.*;
组件从功能上分可分为:
1) 顶层容器: JFrame,JApplet,JDialog,Jwindow 2) 中间容器: JPanel,JScrollPane,JSplitPane, JToolBar 3) 特殊容器:在GUI上起特殊作用的中间层,如 JInternalFrame,JLayeredPane,JRootPane. 4) 基本控件:实现人际交互的组件,如 Jbutton, JComboBox, JList, JMenu, JSlider, JtextField。
JComponent类的特殊功能又分为:
1) 边框设置:使用setBorder()方法可以设 置组件外围的边框,使用一个EmptyBorder对 象能在组件周围留出空白。 2) 双缓冲区:使用双缓冲技术能改进频繁 变化的组件的显示效果。与AWT组件不同, JComponent组件默认双缓冲区,不必自己重 写代码。如果想关闭双缓冲区,可以在组件上 施加setDoubleBuffered(false)方法。 3) 提示信息:使用setTooltipText()方法, 为组件设置对用户有帮助的提示信息。
窗口有关事件发生时的信息被包含在一 个称为WindowEvent类型的对象中 。
WindowEvent类的方法: public Window getWindow(); 获取事件发生的窗口句柄
演示: WindowDemo1.java
Swing基础
Swing的产生主要原因就是AWT不能满 足图形化用户界面发展的需要。 从JDK1.2开始,AWT添加了被称为 Swing的新GUI库,Swing是基于AWT 基本结构所创建的二级用户界面工具集。 Swing是作为JFC(Java Foundation Class)的一部分提供的,它提供了一整 套的GUI组件,为保证可移植性, Swing完全用Java语言编写。
示例: 对JFrame添加组件有两种方式: 1) 用getContentPane( )方法获得JFrame的内容 面板,再对其加入组件: frame.getContentPane().add(childComponent) 2) 建立一个Jpanel或 JDesktopPane之类的中间 容器,把组件添加到容器中,用setContentPane()方 法把该容器置为JFrame的内容面板: Jpanel contentPane=new Jpanel( ); ……//把其它组件添加到Jpanel中; frame.setContentPane(contentPane); //把contentPane对象设置成为frame的内容面板
3、设计一个程序,使得当鼠标在画布上移动 时可以画出一段曲线。例8.1 演示: MyMouseDraw1.java 缺点: 屏幕会闪动。因为每一次都将所有的点 和线重画,点越多,重画的时间将越长,闪 动越厉害。
改进: 方法一:每次只画最近新加的点(线)。只 有当窗口需要刷新时才重画所有的点(线)。 演示: MyMouseDraw1P.java 方法二:通过写屏缓存技术
4) 键盘导航:使用registerKeyboardAction( ) 方法,能使用户用键盘代替鼠标来驱动组件。 JComponent类的子类AbstractButton还提供了便 利的方法--用setMnemonic( )方法指明一个字符, 通过这个字符和一个当前L&F的特殊修饰共同激活按 钮动作。 5) 可插入L&F:每个Jcomponent对象有一个相 应的ComponentUI对象,为它完成所有的绘画、事 件处理、决定尺寸大小等工作。 ComponentUI对象 依赖当前使用的L&F,用 UIManager.setLookAndFeel( )方法可以设置需要的 L&F. 6) 支持布局:通过设置组件最大、最小、推荐尺 寸的方法和设置X、Y对齐参数值的方法能指定布局 管理器的约束条件,为布局提供支持。
2、MouseMotionListener接口
鼠标移动监听接口(MouseMotionListener)用 于监听发生在一个GU构件上的鼠标移动事件,包括鼠 标的移动和拖动,其使用方法与MouseListener接口 相同。它所包含的方法如下: public void mouseDragged(MouseEvent e) 当在一 个构件上按下鼠标按钮并且拖动时被调用。鼠标拖动 事件直到鼠标被释放为止,而不管鼠标的位置是否越 出了原来构件的边界。 pubic void mouseMoved(MouseEvent e) 当鼠标指 针移动时该方法被调用。注意此时鼠标的按钮并没有 被按下。
5) 不可编辑信息的显示:向用户显示不 可编辑信息的组件,例如 JLabel, JProgressBar, ToolTip。 6) 可编辑信息的显示:向用户显示能被 编辑的格式化信息的组件,如 JColorChooser, JFileChoose, JFileChooser, Jtable, JtextArea。
• • • • • • •
windowClosing(WindowEvent) windowClosed(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent)
JAVA的键盘和鼠标事件
鼠标事件 键盘时间 窗口事件 Swing组件
JAVA中常见的事件及继承关系:
鼠标事件
1、MouseListener接口 用于监听发生在一个GUI构件上的鼠标事 件.包括鼠标的按下、释放、单击、进入和退 出。 在一个实现了MouseListener接口或继承 了MouseAdapter类的类中可以定义事件的处 理方法,而该类的一个对象则应该用 addMouseListener()方法注册到发生鼠标事件 的构件上。
MouseListener接口包含的方法如下: public void mouseClicked(MouseEvent e) 当在一个构件上单击鼠标时被调用。 public void mousePressed(MouseEvent e) 当在一个构件上按下鼠标按钮时被调用。 public void mouseReleased(MouseEvent e) 当在一个构件上释放鼠标按钮时被调用。 public void mouseEntered(MouseEvent e) 当鼠标指针进入构件时被调用。 public void mouseExited(MouseEvent e) 当鼠标指针退出构件时被调用。