一、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);
}
}