第十九章 Java绘图

一、Java绘图类

1.Graphics类是所有图形上下文的抽象基本,它允许应用程序在组件以及闭屏图像上进行绘制。

可实现直线,矩形,多边形,椭圆,圆弧等形状和文本,图片的绘制制作。

2.无法改变线条的粗细,不能对图片使用旋转和模糊等过滤效果。Graphics2D是Graphics的扩展。

 

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawCircle extends JFrame{
	private final int OVAL_WIDTH=80;
	private final int OVAL_HEIGHT=80;
	
	public DrawCircle() {
		initialize();
	}
	
	private void initialize() {
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(new DrawPanel());
		setTitle("绘图实例1");
	}
	
	class DrawPanel extends JPanel{
		public void paint(Graphics g) {
			g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT);
			g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);
			g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);
			g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);
			g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new DrawCircle().setVisible(true);
	}

}

 

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawFrame extends JFrame{
	public DrawFrame() {
		setTitle("绘图实例2");
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(new CanvasPanel());
	}
	
	class CanvasPanel extends JPanel{
		public void paint(Graphics g) {
			Graphics2D g2 = (Graphics2D)g;
			Shape[] shapes=new Shape[4];
			shapes[0]=new Ellipse2D.Double(5,5,100,100);
			shapes[1]=new Rectangle2D.Double(110,5,100,100);
			
			shapes[2]=new Rectangle2D.Double(15,15,80,80);
			shapes[3]=new Ellipse2D.Double(120,15,80,80);
			for(Shape shape:shapes) {
				Rectangle2D bounds=shape.getBounds2D();
				if (bounds.getWidth()==80) {
					Color c=new Color(255,0,0);
					g2.setColor(c);
					BasicStroke bs = new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
					g2.setStroke(bs);
					g2.fill(shape);
				}else {
					Color c=new Color(0,0,255);
					g2.setColor(c);
					BasicStroke bs = new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
					g2.setStroke(bs);
					g2.draw(shape);
				}
			}
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new DrawFrame().setVisible(true);
	}
}

 

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;
import javax.swing.*;

public class DrawString extends JFrame {

	public DrawString() {
		setSize(230, 140); // 设置窗体大小
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
		add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
		setTitle("绘图文本"); // 设置窗体标题
	}

	class CanvasPanel extends JPanel {
		public void paint(Graphics g) {
			Graphics2D g2 = (Graphics2D) g;
			Rectangle2D rect = new Rectangle2D.Double(10, 10, 200, 80);
			Font font = new Font("宋体", Font.BOLD, 16);
			Date date = new Date();
			g2.setColor(Color.CYAN); // 设置当前绘图颜色
			g2.fill(rect); // 填充矩形
			g2.setColor(Color.BLUE); // 设置当前绘图颜色
			g2.setFont(font); // 设置字体
			g2.drawString("现在时间是", 20, 30); // 绘制文本
			g2.drawString(String.format("%tr", date), 50, 60); // 绘制时间文本
		}
	}

	public static void main(String[] args) {
		new DrawString().setVisible(true);
	}
}

 

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;

public class RotateImage extends JFrame {
	private Image img;

	public RotateImage() {
		try {
			img = ImageIO.read(new File("src/1.png"));// 读取图片文件
		} catch (IOException e) {
			e.printStackTrace();
		}
		setBounds(100, 100, 400, 350); // 设置窗体大小和位置
		add(new CanvasPanel());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
		setTitle("图片旋转"); // 设置窗体标题
	}

	class CanvasPanel extends JPanel { // 画板
		public void paint(Graphics g) {
			Graphics2D g2 = (Graphics2D) g;
			g2.rotate(Math.toRadians(5));// 旋转5度
			g2.drawImage(img, 70, 10, 200, 200, this);
			g2.rotate(Math.toRadians(5));
			g2.drawImage(img, 70, 10, 200, 200, this);
			g2.rotate(Math.toRadians(5));
			g2.drawImage(img, 70, 10, 200, 200, this);
		}
	}

	public static void main(String[] args) { // 主方法
		new RotateImage().setVisible(true);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值