要执行这些 Java AWT 程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 和 java 命令进行编译和运行。以下是每个程序的执行步骤和功能说明。
1.程序清单 1: MouseEventsDemo.java
此程序演示了鼠标事件处理,包括点击、进入、退出、按下、释放、拖动和移动事件。
java
// 保存为 MouseEventsDemo.java
import java.awt.*;
import java.awt.event.*;
public class MouseEventsDemo extends Frame implements MouseListener, MouseMotionListener {
String msg = "";
int mouseX = 0, mouseY = 0; // 鼠标坐标 public MouseEventsDemo() {
addMouseListener(this);
addMouseMotionListener(this);
addWindowListener(new MyWindowAdapter());
}
// 处理鼠标点击事件
public void mouseClicked(MouseEvent me) {
msg = msg + " -- click received";
repaint();
}
// 处理鼠标进入组件区域事件 public void mouseEntered(MouseEvent me) {
mouseX = 100;
mouseY = 100;
msg = "Mouse entered.";
repaint();
}
// 处理鼠标离开组件区域事件
public void mouseExited(MouseEvent me) {
mouseX = 100;
mouseY = 100;
msg = "Mouse exited.";
repaint();
}
// 处理鼠标按键按下事件
public void mousePressed(MouseEvent me) {
// 保存坐标 mouseX = me.getX();
mouseY = me.getY();
msg = "Button down";
repaint();
}
// 处理鼠标按键释放事件 public void mouseReleased(MouseEvent me) {
// 保存坐标
mouseX = me.getX();
mouseY = me.getY();
msg = "Button Released";
repaint();
}
// 处理鼠标拖动事件 public void mouseDragged(MouseEvent me) {
// 保存坐标 mouseX = me.getX();
mouseY = me.getY();
msg = "*" + " mouse at " + mouseX + ", " + mouseY;
repaint();
}
// 处理鼠标移动事件 public void mouseMoved(MouseEvent me) {
msg = "Moving mouse at " + me.getX() + ", " + me.getY();
repaint();
}
// 在窗口的当前 X,Y 位置显示消息
public void paint(Graphics g) {
g.drawString(msg, mouseX, mouseY);
}
public static void main(String[] args) {
MouseEventsDemo appwin = new MouseEventsDemo();
appwin.setSize(new Dimension(300, 300));
appwin.setTitle("MouseEventDemo");
appwin.setVisible(true);
}
}
// 当点击框架中的关闭框时,关闭窗口并退出程序。
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
执行命令:
bash
javac MouseEventsDemo.java
java MouseEventsDemo
2. 程序清单 2: SimpleKey.java
此程序演示了基本的键盘事件处理,包括按键按下、释放和键入事件。
java
// 保存为 SimpleKey.java
import java.awt.*;
import java.awt.event.*;
public class SimpleKey extends Frame implements KeyListener {
String msg = "";
String keyState = "";
public SimpleKey() {
addKeyListener(this);
addWindowListener(new MyWindowAdapter());
}
// 处理按键按下事件 public void keyPressed(KeyEvent ke) {
keyState = "Key Down";
repaint();
}
// 处理按键释放事件
public void keyReleased(KeyEvent ke) {
keyState = "Key Up";
repaint();
}
// 处理键入字符事件 public void keyTyped(KeyEvent ke) {
msg += ke.getKeyChar();
repaint();
}
// 显示按键信息
public void paint(Graphics g) {
g.drawString(msg, 20, 100);
g.drawString(keyState, 20, 50);
}
public static void main(String[] args) {
SimpleKey appwin = new SimpleKey();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("SimpleKey");
appwin.setVisible(true);
}
}
// 当点击框架中的关闭框时,关闭窗口并退出程序。
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
执行命令:
bash
javac SimpleKey.java
java SimpleKey
3. 程序清单 3: KeyEventsDemo.java
此程序演示了如何识别特定的虚拟键码(如功能键、方向键、翻页键)。
java
// 保存为 KeyEventsDemo.java
import java.awt.*;
import java.awt.event.*;
public class KeyEventsDemo extends Frame
implements KeyListener {
String msg = "";
String keyState = "";
public KeyEventsDemo() {
addKeyListener(this);
addWindowListener(new MyWindowAdapter());
}
// 处理按键按下事件 public void keyPressed(KeyEvent ke) {
keyState = "Key Down";
int key = ke.getKeyCode();
switch(key) {
case KeyEvent.VK_F1:
msg += "<F1>";
break;
case KeyEvent.VK_F2:
msg += "<F2>";
break;
case KeyEvent.VK_F3:
msg += "<F3>";
break;
case KeyEvent.VK_PAGE_DOWN:
msg += "<PgDn>";
break;
case KeyEvent.VK_PAGE_UP:
msg += "<PgUp>";
break;
case KeyEvent.VK_LEFT:
msg += "<Left Arrow>";
break;
case KeyEvent.VK_RIGHT:
msg += "<Right Arrow>";
break;
}
repaint();
}
// 处理按键释放事件 public void keyReleased(KeyEvent ke) {
keyState = "Key Up";
repaint();
}
// 处理键入字符事件
public void keyTyped(KeyEvent ke) {
msg += ke.getKeyChar();
repaint();
}
// 显示按键信息 public void paint(Graphics g) {
g.drawString(msg, 20, 100);
g.drawString(keyState, 20, 50);
}
public static void main(String[] args) {
KeyEventsDemo appwin = new KeyEventsDemo();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("KeyEventsDemo");
appwin.setVisible(true);
}
}
// 当点击框架中的关闭框时,关闭窗口并退出程序。
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
执行命令:
bash
javac KeyEventsDemo.java
java KeyEventsDemo
4. 程序清单 4: AdapterDemo.java
此程序演示了使用适配器类(MouseAdapter)来处理鼠标事件,避免了实现接口中所有方法的繁琐。
java
// 保存为 AdapterDemo.java
import java.awt.*;
import java.awt.event.*;
public class AdapterDemo extends Frame {
String msg = "";
public AdapterDemo() {
addMouseListener(new MyMouseAdapter(this));
addMouseMotionListener(new MyMouseAdapter(this));
addWindowListener(new MyWindowAdapter());
}
// 显示鼠标信息 public void paint(Graphics g) {
g.drawString(msg, 20, 80);
}
public static void main(String[] args) {
AdapterDemo appwin = new AdapterDemo();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("AdapterDemo");
appwin.setVisible(true);
}
}
// 仅处理鼠标点击和拖动事件
class MyMouseAdapter extends MouseAdapter {
AdapterDemo adapterDemo;
public MyMouseAdapter(AdapterDemo adapterDemo) {
this.adapterDemo = adapterDemo;
}
// 处理鼠标点击事件
public void mouseClicked(MouseEvent me) {
adapterDemo.msg = "Mouse clicked";
adapterDemo.repaint();
}
// 处理鼠标拖动事件
public void mouseDragged(MouseEvent me) {
adapterDemo.msg = "Mouse dragged";
adapterDemo.repaint();
}
}
// 当点击框架中的关闭框时,关闭窗口并退出程序。
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
执行命令:
bash
javac AdapterDemo.java
java AdapterDemo
5. 程序清单 5: MousePressedDemo.java
此程序演示了使用外部适配器类处理鼠标按下事件。
java
// 保存为 MousePressedDemo.java
import java.awt.*;
import java.awt.event.*;
public class MousePressedDemo extends Frame {
String msg = "";
public MousePressedDemo() {
addMouseListener(new MyMouseAdapter(this));
addWindowListener(new MyWindowAdapter());
}
public void paint(Graphics g) {
g.drawString(msg, 20, 100);
}
public static void main(String[] args) {
MousePressedDemo appwin = new MousePressedDemo();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("MousePressedDemo");
appwin.setVisible(true);
}
}
class MyMouseAdapter extends MouseAdapter {
MousePressedDemo mousePressedDemo;
public MyMouseAdapter(MousePressedDemo mousePressedDemo) {
this.mousePressedDemo = mousePressedDemo;
}
// 处理鼠标按下事件 public void mousePressed(MouseEvent me) {
mousePressedDemo.msg = "Mouse Pressed.";
mousePressedDemo.repaint();
}
}
// 当点击框架中的关闭框时,关闭窗口并退出程序。
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
执行命令:
bash
javac MousePressedDemo.java
java MousePressedDemo
6. 程序清单 6: InnerClassDemo.java
此程序演示了使用内部类来处理事件,使代码结构更紧凑。
java
// 保存为 InnerClassDemo.java
import java.awt.*;
import java.awt.event.*;
public class InnerClassDemo extends Frame {
String msg = "";
public InnerClassDemo() {
addMouseListener(new MyMouseAdapter());
addWindowListener(new MyWindowAdapter());
}
// 内部类处理鼠标按下事件
class MyMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent me) {
msg = "Mouse Pressed.";
repaint();
}
}
// 内部类处理窗口关闭事件
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
public void paint(Graphics g) {
g.drawString(msg, 20, 80);
}
public static void main(String[] args) {
InnerClassDemo appwin = new InnerClassDemo();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("InnerClassDemo");
appwin.setVisible(true);
}
}
执行命令:
bash
javac InnerClassDemo.java
java InnerClassDemo
7. 程序清单 7: AnonymousInnerClassDemo.java
此程序演示了使用匿名内部类来处理事件,这是最简洁的事件处理方式。
java
// 保存为 AnonymousInnerClassDemo.java
import java.awt.*;
import java.awt.event.*;
public class AnonymousInnerClassDemo extends Frame {
String msg = "";
public AnonymousInnerClassDemo() {
// 匿名内部类处理鼠标按下事件
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
msg = "Mouse Pressed.";
repaint();
}
});
// 匿名内部类处理窗口关闭事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
}
public void paint(Graphics g) {
g.drawString(msg, 20, 80);
}
public static void main(String[] args) {
AnonymousInnerClassDemo appwin =
new AnonymousInnerClassDemo();
appwin.setSize(new Dimension(200, 150));
appwin.setTitle("AnonymousInnerClassDemo");
appwin.setVisible(true);
}
}
执行命令:
bash
javac AnonymousInnerClassDemo.java
java AnonymousInnerClassDemo
程序功能与事件处理机制总结
| 程序文件 | 核心演示内容 | 事件处理方式 | 关键接口/类 |
|---|---|---|---|
MouseEventsDemo |
鼠标所有事件(点击、移动、拖动等) | 主类实现 MouseListener 和 MouseMotionListener 接口 |
MouseListener, MouseMotionListener |
SimpleKey |
键盘基本事件(按下、释放、键入) | 主类实现 KeyListener 接口 |
KeyListener |
KeyEventsDemo |
识别特定虚拟键码(如F1, 方向键) | 主类实现 KeyListener 接口,使用 getKeyCode() |
KeyListener, KeyEvent.VK_* |
AdapterDemo |
使用适配器类处理鼠标事件 | 使用外部 MouseAdapter 类 |
MouseAdapter |
MousePressedDemo |
使用外部适配器类处理单一事件 | 使用外部 MouseAdapter 类 |
MouseAdapter |
InnerClassDemo |
使用内部类处理事件 | 使用成员内部类 | 内部类 |
AnonymousInnerClassDemo |
使用匿名内部类处理事件 | 使用匿名内部类 | 匿名内部类 |
通用执行步骤:
- 保存文件 :将每个
listing的代码复制到对应的.java文件中(例如MouseEventsDemo.java)。 - 编译 :在命令行中,导航到文件所在目录,运行
javac 文件名.java。 - 运行 :编译成功后,运行
java 类名(注意:类名不含.java后缀)。
注意事项:
- 这些是基于 AWT 的旧式 Java GUI 程序。运行前请确保已安装 Java开发工具包 (JDK)。
- 程序窗口的关闭功能均通过
WindowAdapter实现,点击窗口关闭按钮可退出程序 。 - 所有程序都遵循 AWT 的事件处理模型:事件源 (如
Frame)注册事件监听器 (如MouseListener),当事件发生时,会调用监听器对应的回调方法(如mouseClicked)。