? 下图说明了java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标系,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标表示当前位置为垂直方向,距离坐标原点y个像素
? 我们先看一个案例,在面板上画一个小圆,然后借这个案例,来讲解java绘图技术原理
import javax.swing.*;
import java.awt.*;
/**
* 01. 演示如何在画板上画出圆形
**/
public class DrawCircle extends JFrame{//JFrame对应窗口, 可以理解成一个画框
//2. 定义一个面板
private MyPanel myPanel = null;
public static void main(String[] args) {
new DrawCircle();
}
public DrawCircle() { //构造器
//2.1 初始化面板
myPanel = new MyPanel();
//2.2 把面板放入到窗口
this.add(myPanel);
//2.3 设置窗口大小
this.setSize(400, 300);
//2.4 当点击窗口的x 程序停止运行
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);//可以显示
}
}
//1. 先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {
//说明
//1. MyPanel 对象就是一个画板
//2. Graphics g 把 g 理解成一只画笔
//2. Graphics 提供了很多绘图的方法啊啊
@Override
public void paint(Graphics g) {
super.paint(g);//调用父类的方法完成初始化
System.out.println("paint 方法被调用了");
g.drawOval(10, 10, 100, 100);
}
}
Component类提供了两个绘图相关最重要的方法
当组件第一次在屏幕显示的时候,程序会自动调用paint()方法来绘制组件
当以下情况paint()将会被调用
Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考jdk帮助文档]
import javax.swing.*;
import java.awt.*;
public class DrawCircle extends JFrame{//JFrame对应窗口, 可以理解成一个画框
//2. 定义一个面板
private MyPanel myPanel = null;
public static void main(String[] args) {
new DrawCircle();
}
public DrawCircle() { //构造器
//2.1 初始化面板
myPanel = new MyPanel();
//2.2 把面板放入到窗口
this.add(myPanel);
//2.3 设置窗口大小
this.setSize(400, 300);
//2.4 当点击窗口的x 程序停止运行
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);//可以显示
}
}
//1. 先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {
//说明
//1. MyPanel 对象就是一个画板
//2. Graphics g 把 g 理解成一只画笔
//2. Graphics 提供了很多绘图的方法啊啊
@Override
public void paint(Graphics g) {
super.paint(g);//调用父类的方法完成初始化
System.out.println("paint 方法被调用了");
g.drawOval(10, 10, 100, 100);
//演示绘制不同的图形..
// 1. 画直线 drawLine(int x1, int y1, int x2, int y2)
// g.drawLine(10, 10, 100, 100);
// 2. 画矩形边框 drawRect(int x, int y, int width, int height)
// g.drawRect(10,10, 100, 100);
// 3. 画椭圆边框 drawOval(int x, int y, int width, int height)
// 4. 填充矩形 fillRect(int x, int y, int width, int height)
// //设置画面颜色
// g.setColor(Color.blue);
// g.fillRect(10, 10, 100,100);
// 5. 填充椭圆 fillOval(int x, int y, int width, int height)
// g.setColor(Color.red);
// g.fillOval(10, 10, 100, 100);
// 6. 画图片 drawImage(img, int x, int y, ..)
// //6.1 获取图片资源 /bg.png 表示在该项目的根目录获取 bg.png 图片资源
// //6.2 添加图片时我们要将图片资源放入 out/你的项目名称例如 chapter16
// Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
// g.drawImage(image, 10, 10, 175, 221, this);
// 7. 画字符串 drawString(String str, int x, int y)
// 8. 设置画笔的字体 setFont(Font font)
// 9. 设置画笔的颜色 SetColor(Color c)
//7.1 给画笔设置颜色
// g.setColor(Color.red);
// g.setFont(new Font("宋体",Font.BOLD, 20));
// //7.2 这里设置的 100, 100, 对应的点是你字符串的左下角
// g.drawString("天津", 100, 100);
}
}
如果需要实验代码,可以在自己的idea中,去除演示代码的注释