Java图形绘制:点、线、矩形与弧椭圆的实现
立即解锁
发布时间: 2025-08-18 02:26:32 阅读量: 12 订阅数: 37 


Java编程实战:从入门到精通
### Java图形绘制:点、线、矩形与弧椭圆的实现
在Java编程中,图形绘制是一个常见的需求。本文将详细介绍如何在Java中定义和绘制各种基本图形,包括点、直线、矩形、圆弧和椭圆等。
#### 1. 点的定义与操作
在Java的`java.awt.geom`包中,有两个类用于定义点:`Point2D.Float`和`Point2D.Double`。它们都是`Point2D`类的内部类,而`Point2D`是一个抽象基类。另外,`java.awt`包中的`Point`类也用于定义点,但其坐标类型为`int`。
点类的继承关系如下:
```mermaid
graph TD
classDef abstract fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
Point2D(java.awt.geom.Point2D):::abstract --> Point(java.awt.Point)
Point2D --> Point2D.Double(java.awt.geom.Point2D.Double)
Point2D --> Point2D.Float(java.awt.geom.Point2D.Float)
```
这三个具体的点类都继承了以下操作:
- **访问坐标值**:`getX()`和`getY()`方法返回点的`x`和`y`坐标,类型为`double`。同时,坐标也存储在公共字段`x`和`y`中,可以直接以原始类型访问。
- **计算两点间的距离**:有三种重载的`distance()`方法用于计算两点间的距离,返回类型为`double`。
- `distance(double x1, double y1, double x2, double y2)`:静态方法,计算点`(x1, y1)`和`(x2, y2)`之间的距离。
- `distance(double xNext, double yNext)`:计算当前点到点`(xNext, yNext)`的距离。
- `distance(Point2D nextPoint)`:计算当前点到`nextPoint`的距离,参数可以是`Point`、`Point2D.Float`或`Point2D.Double`类型。
对应的`distanceSq()`方法返回两点间距离的平方。
示例代码:
```java
import java.awt.geom.Point2D;
public class PointDistanceExample {
public static void main(String[] args) {
Point2D.Double p1 = new Point2D.Double(2.5, 3.5);
java.awt.Point p2 = new java.awt.Point(20, 30);
double lineLength = p1.distance(p2);
System.out.println("两点间的距离: " + lineLength);
double lineLengthStatic = Point2D.distance(2.5, 3.5, 20, 30);
System.out.println("使用静态方法计算的距离: " + lineLengthStatic);
}
}
```
- **比较点**:`equals()`方法用于比较当前点与参数引用的点对象,如果相等返回`true`,否则返回`false`。
- **设置点的新位置**:`setLocation()`方法有两个版本。一个接受`Point2D`类型的参数,将当前点的坐标设置为参数点的坐标;另一个接受`double`类型的`x`和`y`坐标作为新位置。`Point`类还有一个接受两个`int`类型参数的版本。
#### 2. 直线和矩形的绘制
`java.awt.geom`包中包含了用于定义直线和矩形的类。
##### 2.1 直线
`Line2D`是定义两点之间直线的抽象基类,有两个具体子类:`Line2D.Float`和`Line2D.Double`,分别使用`float`和`double`类型的用户坐标定义直线。
可以通过提供两个`Point2D`对象或两对`(x, y)`坐标来定义直线。例如:
```java
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
public class LineExample {
public static void main(String[] args) {
// 通过坐标对定义直线
Line2D.Float line1 = new Line2D.Float(5.0f, 100.0f, 50.0f, 150.0f);
// 通过Point2D.Float对象定义直线
Point2D.Float p1 = new Point2D.Float(5.0f, 100.0f);
Point2D.Float p2 = new Point2D.Float(50.0f, 150.0f);
Line2D.Float line2 = new Line2D.Float(p1, p2);
}
}
```
要在组件上绘制直线,可以使用`Graphics2D`对象的`draw()`方法:
```java
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawLineExample extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
Point2D.Float p1 = new Point2D.Float(5.0f, 100.0f);
Point2D.Float p2 = new Point2D.Float(50.0f, 150.0f);
Line2D.Float line = new Line2D.Float(p1, p2);
g2D.draw(line);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Draw Line Example");
frame.add(new DrawLineExample());
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
```
##### 2.2 矩形
`Rectangle2D`是定义矩形的抽象基类,有`Rectangle2D.Double`和`Rectangle2D.Float`两个具体子类。矩形由其左上角的坐标以及宽度和高度定义。
创建矩形的示例代码:
```java
import java.awt.geom.Rectangle2D;
public class RectangleExample {
public static void main(String[] args) {
float width = 120.0f;
float height = 90.0f;
Rectangle2D.Float rectangle = new Rectangle2D.Float(50.0f, 150.0f, width, height);
}
}
```
可以使用`setRect()`方法设置矩形的位置、宽度和高度,该方法有三个版本,分别接受不同类型的参数。
`Rect
0
0
复制全文
相关推荐










