JavaGUI编程:事件处理、图形绘制与内部类的应用
立即解锁
发布时间: 2025-08-18 01:34:27 阅读量: 2 订阅数: 7 


Head First Java: Fun and Engaging Learning Experience
### Java GUI编程:事件处理、图形绘制与内部类的应用
#### 1. 识别事件源
在Java编程中,如何判断一个对象是否为事件源呢?可以查看API。具体来说,寻找以 “add” 开头、以 “Listener” 结尾,并且接受一个监听器接口参数的方法。例如,如果看到 `addKeyListener(KeyListener k)`,那么拥有这个方法的类就是 `KeyEvents` 的事件源,这里存在一个命名模式。
#### 2. 图形绘制的三种方式
在GUI中,有三种方式可以将内容显示在屏幕上:
- **放置小部件到框架**:可以添加按钮、菜单、单选按钮等,使用如下代码:
```java
JFrame frame = new JFrame();
frame.getContentPane().add(myButton);
```
`javax.swing` 包中有十几种小部件类型。
- **在小部件上绘制2D图形**:使用图形对象绘制形状,例如:
```java
graphics.fillOval(70, 70, 100, 100);
```
Java2D API中有很多有趣且复杂的图形方法,可绘制的图形远不止矩形和圆形。
- **在小部件上放置JPEG图像**:可以将自己的图像放置在小部件上,代码如下:
```java
graphics.drawImage(myPic, 10, 10, this);
```
#### 3. 创建自定义绘图小部件
如果想在屏幕上显示自己的图形,最好的方法是创建自定义的可绘制小部件。具体步骤如下:
1. 创建 `JPanel` 的子类,并重写 `paintComponent()` 方法。所有的图形代码都应放在 `paintComponent()` 方法中。
```java
import javax.swing.*;
import java.awt.*;
class MyDrawingPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制图形的代码
g.fillOval(70, 70, 100, 100);
}
}
```
2. `paintComponent()` 方法由系统调用,不要自己调用该方法。该方法的参数(一个 `Graphics` 对象)是实际的绘图画布,由系统提供。
3. 可以通过调用 `repaint()` 方法请求系统刷新显示,这最终会调用 `paintComponent()` 方法。
#### 4. `paintComponent()` 方法中的有趣操作
在 `paintComponent()` 方法中可以进行很多有趣的操作,例如:
- 显示JPEG图像。
- 在黑色背景上绘制随机颜色的圆形。
#### 5. `Graphics` 与 `Graphics2D`
`paintComponent()` 方法的参数声明为 `Graphics` 类型,但实际上它是 `Graphics2D` 类的实例。由于多态性,编译器根据引用类型决定可以调用的方法。如果需要使用 `Graphics2D` 类的方法,需要进行类型转换:
```java
Graphics2D g2d = (Graphics2D) g;
```
`Graphics` 引用可以调用的方法有:`drawImage()`、`drawLine()`、`drawPolygon`、`drawRect()`、`drawOval()`、`fillRect()`、`fillRoundRect()`、`setColor()` 等。
`Graphics2D` 引用可以调用的方法有:`fill3DRect()`、`draw3DRect()`、`rotate()`、`scale()`、`shear()`、`transform()`、`setRenderingHints()` 等。
#### 6. 事件处理
- **创建GUI窗口**:通常使用 `JFrame`,示例代码如下:
```java
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setVisible(true);
```
- **添加小部件**:需要添加到 `JFrame` 的内容面板中:
```java
frame.getContentPane().add(button);
```
- **监听事件**:要知道用户何时点击按钮或进行其他操作,需要监听GUI事件。首先要向事件源注册兴趣,事件源是基于用户交互触发事件的对象(如按钮、复选框等)。监听器接口为事件源提供了回调的方式,接口定义了事件发生时事件源将调用的方法。注册事件的方法通常形式为 `add<EventType>Listener`,例如注册按钮的 `ActionEvents`:
```java
button.addActionListener(this);
```
实现监听器接口,将事件处理代码放在回调方法中,例如:
```java
public void actionPerformed(ActionEvent event) {
button.setText("you clicked!");
}
```
事件对象会携带事件的相关信息,包括事件源。
#### 7. 事件触发图形绘制
可以将事件与绘图面板的变化关联起来,例如每次点击按钮时让圆形改变颜色。程序流程如下:
```mermaid
graph LR
A[构建框架,包含绘图面板和按钮] --> B[创建监听器并注册到按钮]
B --> C[显示框架,等待用户点击]
C --> D[用户点击按钮]
D --> E[按钮创建事
```
0
0
复制全文
相关推荐









