掌握Java图形界面:KeyListener与键盘事件详解

需积分: 6 1 下载量 118 浏览量 更新于2024-07-13 收藏 421KB PPT 举报
本资源主要关注Java图形用户界面(GUI)中的键盘事件处理,特别是通过KeyListener接口来实现。在GUI编程中,当一个组件处于活动状态时,用户的键盘输入会触发KeyEvent事件,这使得组件能够响应用户的操作。KeyListener接口是处理这类事件的关键,它定义了三个核心方法: keyPressed()、keyReleased() 和 keyTyped(),分别对应按键被按下、释放和字符被键入这三个阶段。 图形用户界面是现代应用程序的标准,包括单机应用和客户端/服务器架构的客户端部分。Java图形界面的发展经历了两个主要阶段:早期的AbstractWindow Toolkit (AWT) 和后来的Swing。AWT虽然提供了早期的基础,但由于其庞大的规模、性能问题和使用难度,逐渐被Swing所取代。Swing从Java 1.2版本开始引入,提供了更轻量级、易用且功能强大的组件,包括各种图形组件(如直线、矩形等)、容器、布局管理器和事件处理机制。 在创建Java GUI程序时,主要依赖AWT和Swing库。AWT包含众多接口和类,而Swing则更为精简,且继承了许多AWT的功能。顶层窗口在Java中通常称为框架,AWT中的Frame类在Swing中被JFrame类扩展。Swing库中的组件和容器类是构建界面的基础,布局管理器用于控制组件的排列方式,事件处理类则是关键,使得程序能够根据用户的输入做出响应。 简单图形用户界面的示例中,开发者可能会创建一个JFrame,它是AWT Frame类的Swing版本,然后添加KeyListener监听器来捕捉并处理用户的键盘输入。通过这些组件和事件机制,开发者能够构建出交互性更强的用户界面,从而提升应用程序的用户体验和实用性。 理解和掌握键盘事件处理和Java图形用户界面的组件、事件模型以及Swing与AWT的区别,是开发高效GUI应用的重要基础。通过实际操作,开发者可以灵活运用这些技术,创建出符合现代需求的桌面应用程序。

对该代码的每一行做解释import java.awt.*; import java.awt.event.*; class KeyboardDemo extends Frame implements KeyListener{ static final int SQUARE_SIZE = 20;//小方框的边长 Color squareColor;//小方框颜色. int squareTop, squareLeft;//小方框的左上角坐标 public KeyboardDemo() { squareTop = 100; squareLeft = 100; //初始小方框位置 squareColor = Color.red; addKeyListener(this); //初始颜色设置为红色 repaint(); } //注册键盘事件监听 public void paint (Graphics g) { g.setColor(squareColor); g.fillRect(squareLeft, squareTop, SQUARE_SIZE, SQUARE_SIZE); } /*用键盘控制小方块颜色的改变*/ public void keyTyped (KeyEvent evt){ char ch = evt.getKeyChar(); if (ch == 'B' || ch == 'b') { squareColor = Color.blue; repaint(); } else if (ch == 'G' || ch == 'g') { squareColor = Color.green; repaint(); } } public void keyPressed (KeyEvent evt){ int key = evt.getKeyCode(); if (key == KeyEvent.VK_LEFT) { squareLeft -= 8; if (squareLeft < 3) squareLeft = 3; repaint(); } else if (key == KeyEvent.VK_RIGHT) { squareLeft += 8; if (squareLeft > getWidth() - 3 - SQUARE_SIZE) squareLeft = getWidth() - 3 - SQUARE_SIZE; repaint(); } else if (key == KeyEvent.VK_UP) { squareTop -= 8; if (squareTop < 23) squareTop = 23; repaint(); } else if (key == KeyEvent.VK_DOWN) { squareTop += 8; if (squareTop > getHeight() - 3 - SQUARE_SIZE) squareTop = getHeight() - 3 - SQUARE_SIZE; repaint(); } } public void keyReleased (KeyEvent evt){ } public static void main (String args[ ]){ Frame x = new KeyboardDemo(); x.setSize(300, 300); x.setVisible(true); } }

2023-05-25 上传