import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class GraphicsDraw extends JFrame{
public GraphicsDraw(){
add("Center",new MyCanvas2());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,300);
setVisible(true);
}
public static void main(String[] args) {
GraphicsDraw f = new GraphicsDraw();
}
/**
* 参数:
* x - 要填充矩形的 x 坐标。
* y - 要填充矩形的 y 坐标。
* width - 要填充矩形的宽度。
* height - 要填充矩形的高度。
* arcWidth - 4 个角弧度的水平直径。
* arcHeight - 4 个角弧度的垂直直径。
*/
class MyCanvas2 extends Canvas{
public void paint(Graphics g){
g.drawRect(10,10,60,50);
g.fillRect(100, 10, 60, 50);//填充指定图形
g.drawRoundRect(190, 10, 60, 50, 15, 15);//用此图形上下文的当前颜色绘制圆角矩形的边框。
g.fillRoundRect(70, 90, 140, 100, 30, 40);//用当前颜色填充指定的圆角矩形。
g.setColor(Color.yellow);
g.fill3DRect(5, 65, 50, 75, true);//绘制一个用当前颜色填充的 3-D 高亮显示矩形。
//raised - 一个用于确定矩形是凸出平面显示还是凹入平面显示的 boolean 值。
g.setColor(Color.blue);
g.drawOval(280, 20, 50, 50);//绘制椭圆的边框。
g.fillOval(360, 20, 75, 75);
g.drawArc(180, 90, 70, 70, 0, 75);//绘制一个覆盖指定矩形的圆弧或椭圆弧边框。
g.fillArc(280, 90, 70, 70, 0, 75);
g.drawArc(10, 100, 70, 80, 0, 175);
g.fillArc(100, 100, 70, 90, 0, 270);
g.drawArc(200, 80, 80, 80, 0, 180);
//绘制一个由 x 和 y 坐标数组定义的闭合多边形。每对 (x, y) 坐标定义一个点。
/**
* 参数:xPoints - x 坐标数组。yPoints - y 坐标数组。nPoints - 点的总数。
*/
int[] x = new int[]{100,200,300,400};
int[] y = new int[]{400,300,200,100};
g.drawPolygon(x,y,x.length);
}
}
}
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JFrame;
public class Draw2DObjects extends JFrame{
Shape shapes[] = new Shape[5];//shape:形状 //Shape 接口提供了表示一些几何形状的对象的定义。
public static void main(String[] args) {
Draw2DObjects app = new Draw2DObjects();
}
public Draw2DObjects(){
add("Center",new MyCanvas1());
//Line2D 表示 (x,y) 坐标空间中的线段。
shapes[0] = new Line2D.Double(0.0,0.0,100.0,100.0);//根据指定坐标构造并初始化 Line2D。
//Rectangle2D 类描述通过位置 (x,y) 和尺寸 (w x h) 定义的矩形。
shapes[1] = new Rectangle2D.Double(10.0,100.0,200.0,200.0);//定义一个在 double 坐标中指定的矩形。
//Ellipse2D 类描述窗体矩形定义的椭圆。
shapes[2] = new Ellipse2D.Double(20.0,200.0,100.0,100.0);//根据指定坐标构造和初始化 Ellipse2D。
//GeneralPath 类表示根据直线、二次曲线和三次 (Bézier) 曲线构造的几何路径。General:将军、一般
//GeneralPath 是一个遗留的 final 类,它精确地实现了其超类 Path2D.Float 的行为。
GeneralPath path = new GeneralPath();
/**
* append方法:将指定 PathIterator 对象的几何形状添加到路径中
* 参数:
* pi - 其几何形状将被添加到此路径的 PathIterator
* connect - 一个 boolean 值,用于控制是否将初始 moveTo 段转换为 lineTo 段,从而将新几何形状连接到现有路径
*/
path.append(new Line2D.Double(25.0,175.0,300.0,100.0), true);
shapes[3] = path;
//RoundRectangle2D 类定义一个矩形,该矩形具有由位置 (x,y)、维度 (w x h) 以及圆角弧的宽度和高度定义的圆角。
shapes[4] = new RoundRectangle2D.Double(350.0,250.0,200.0,100.0,50.0,25.0);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
class MyCanvas1 extends Canvas{
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D)g;//把此画笔转成Graphics2D
for(int i = 0; i < shapes.length; i++){
if(shapes[i] != null){
g2d.draw(shapes[i]);
}
}
}
}
}