利用Swing绘制2D图形
发布时间: 2024-02-22 16:38:00 阅读量: 29 订阅数: 23
# 1. Swing图形界面介绍
1.1 **Swing是什么?**
Swing是Java的一个GUI工具包,用于开发图形界面应用程序。它提供了丰富的组件库,可以用来创建按钮、文本框、标签等各种界面元素。
1.2 **Swing与AWT的区别**
AWT(Abstract Window Toolkit)是Java的原始GUI工具包,而Swing是在AWT之上的一层抽象,提供了更丰富的控件和功能。相比AWT,Swing具有更好的外观和跨平台性能。
1.3 **为什么选择Swing来绘制2D图形?**
Swing提供了强大的绘图能力,可以方便地绘制各种2D图形,同时支持事件处理和动画效果。使用Swing可以快速实现图形界面,并且可以与其他Swing组件无缝集成,为绘制2D图形提供了便利。
# 2. Swing绘图基础
Swing是Java中用于创建图形用户界面的工具包,其中提供了丰富的绘图功能,可以用于绘制各种2D图形。在本章中,我们将介绍Swing绘图的基础知识,包括如何绘制简单图形,设置颜色和线条样式,以及坐标系与尺寸单位的转换。
### 2.1 绘制简单图形:线段、矩形、圆形
首先,让我们来看一下如何在Swing中绘制简单的图形。下面是一个Java Swing中绘制线段、矩形和圆形的示例代码:
```java
import javax.swing.*;
import java.awt.*;
public class SimpleDrawingExample extends JFrame {
public SimpleDrawingExample() {
setTitle("Simple Drawing Example");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MyPanel());
}
class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制线段
g.drawLine(50, 50, 200, 50);
// 绘制矩形
g.drawRect(50, 100, 100, 50);
// 绘制圆形
g.drawOval(200, 100, 50, 50);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
SimpleDrawingExample example = new SimpleDrawingExample();
example.setVisible(true);
});
}
}
```
在上面的示例代码中,我们创建了一个继承自JPanel的自定义面板类MyPanel,在其paintComponent方法中使用Graphics对象绘制了线段、矩形和圆形。然后在主函数中创建了SimpleDrawingExample窗口,并将自定义面板添加到窗口中进行显示。
### 2.2 设置颜色和线条样式
在Swing中,可以通过设置Graphics对象的颜色和线条样式来实现绘图效果的定制化。下面是一个示例代码,演示了如何在绘制图形时设置颜色和线条样式:
```java
class CustomDrawingExample extends JFrame {
public CustomDrawingExample() {
setTitle("Custom Drawing Example");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MyPanel());
}
class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 设置颜色
g.setColor(Color.RED);
// 设置线条样式
Graphics2D g2d = (Graphics2D) g;
BasicStroke stroke = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
g2d.setStroke(stroke);
// 绘制矩形
g.drawRect(50, 50, 100, 100);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
CustomDrawingExample example = new CustomDrawingExample();
example.setVisible(true);
});
}
}
```
在上面的示例中,我们使用了setColor方法设置了绘图的颜色为红色,使用Graphics2D对象设置了绘图的线条样式为圆形端点和连接处为圆角。然后在绘制矩形时,直接应用了这些颜色和线条样式的设置。
### 2.3 坐标系与尺寸单位的转换
在Swing中绘制图形时,需要理解物理坐标和像素坐标之间的转换关系,以及坐标系的原点位置。下面是一个示例代码,演示了如何进行坐标系的转换绘制椭圆:
```java
class CoordinateTransformExample extends JFrame {
public CoordinateTransformExample() {
setTitle("Coordinate Transform Example");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MyPanel());
}
class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 获取面板的宽度和高度
int panelWidth = getWidth();
int panelHeight = getHeight();
// 以面板中心为原点,绘制椭圆
int centerX = panelWidth / 2;
int centerY = panelHeight / 2;
int radiusX = 100;
int radiusY = 50;
g.drawOval(centerX - radiusX, centerY - radiusY, radiusX * 2, radiusY * 2);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
CoordinateTransformExample example = new CoordinateTransformExample();
example.setVisible(true);
});
}
}
```
在上面的示例中,我们首先获取了面板的宽度和高度,然后根据面板中心计算出了椭圆的位置和尺寸。这里进行了坐标的转换,使得绘制的椭圆始终处于面板的中心位置。
通过上面的示例代码,我们可以学习到在Swing中如何绘制简单图形,设置颜色和线条样式,以及进行坐标系与尺寸单位的转换。这些是绘制2D图形的基础知识,为后续的高级图形绘制打下了基础。
# 3. Swing绘制复杂图形
在第三章中,我们将介绍如何利用Swing库来绘制一些复杂的图形,包括绘制多边形、曲线以及组合和填充图形。通过这些内容的学习,你将更加熟练掌握Swing绘图的技巧,为实现更加丰富多彩的图形界面效果打下基础。
#### 3.1 绘制多边形
在Swing中,要绘制多边形可以通过绘制一系列相连的线段来实现。下面是一个简单的Java示例代码,演示如何使用Swing绘制一个五边形:
```java
import javax.swing.*;
import java.awt.*;
public class PolygonExample extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int[] xPoints = {50, 100, 150, 120, 80};
int[] yPoints = {50, 70, 100, 140, 120};
int nPoints = 5;
g.setColor(Color.RED);
g.fillPolygon(xPoints, yPoints, nPoints);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Polygon Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new PolygonExample());
frame.setSize(200, 200);
frame.setVisible(true);
}
}
```
**代码总结:**
- 使用`fillPolygon`方法可以填充一个多边形;
- `xPoints`和`yPoints`数组分别表示多边形各顶点的横纵坐标;
- `nPoints`表示多边形的边数。
**结果说明:**
运行上述代码,将会在窗口中绘制一个红色的五边形。
#### 3.2 绘制曲线
在Swing中,绘制曲线可以使用`drawCurve`方法。以下是一个绘制贝塞尔曲线的Java示例代码:
```java
import javax.swing.*;
import java.awt.*;
public class CurveExample extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
int x1 = 50, y1 = 50;
int x2 = 150, y2 = 150;
int ctrlX1 = 80, ctrlY1 = 100;
int ctrlX2 = 120, ctrlY2 = 120;
CubicCurve2D curve = new CubicCurve2D.Double(x1, y1, ctrlX1, ctrlY1, ctrlX2, ctrlY2, x2, y2);
g2d.draw(curve);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Curve Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame
```
0
0