java绘图
绘图准备
在正式绘图前,我们还需进行一系列操作来为绘图提供条件
1、创建一个类继承自JPanel类,这相当于创建了一个画板
class MyPanel extends JPanel{}
2、在该类中重写父类的构造方法paint,并使用Graphics
对象来进行绘图。Graphics
类提供了绘制基本形状、文本和图像的方法。该方法无需显式的调用,以下几种情况,系统会自动调用该方法:
1、首次运行程序时,系统会调用该方法绘制界面
2、窗口最小化后再最大化时
3、窗口的大小发生变化时
4、repaint函数被调用
之后我们绘制各种图形都可以在该类中执行
class MyPanel extends JPanel{
@Override
public void paint(Graphics g) {//绘图方法
super.paint(g);//调用父类的方法完成初始化
}}
3、我们还需要有一个窗口/框架来显示该画板,这就需要JFrame类,此时有两种方法
1、创建一个JFrame对象,作为应用程序的窗口
public class Go {
public static void main(String[] args) {
JFrame frame = new JFrame("绘图示例"); // 创建一个JFrame对象,作为应用程序的窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置当用户点击窗口关闭按钮时,程序会退出
MyPanel mp = new MyPanel();// 创建自定义面板的实例
frame.add(mp);// 将自定义面板添加到窗口中
frame.setSize(1000, 800);// 设置窗口的大小
frame.setVisible(true);// 显示窗口
}}
2、直接使主类继承自JFrame类,调用构造方法来创建窗口
public class One_More extends JFrame{
private MyPanel mp2=new MyPanel();
public static void main(String[] args) {
new One_More();
}
public One_More(){
this.add(mp2);
this.setSize(1000,800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
此时基础操作就已做完了,我们就可以在先前创建的继承自JPanel的类中执行绘图操作,以下是一些常用的绘图方法:
绘图方法
绘制基本形状
1、drawLine(int x1, int y1, int x2, int y2): 绘制一条从点(x1, y1)到点(x2, y2)的直线。
2、drawRect(int x, int y, int width, int height): 绘制一个矩形,其左上角位于(x, y),宽度和高度分别由width和height指定。这个方法只绘制矩形的边框。
3、fillRect(int x, int y, int width, int height): 绘制一个填充的矩形,其左上角位于(x, y),宽度和高度分别由width和height指定。
4、drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): 绘制一个圆角矩形,其左上角位于(x, y),宽度和高度分别由width和height指定,圆角的弧度由arcWidth和arcHeight指定。
5、fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): 绘制一个填充的圆角矩形。
6、drawOval(int x, int y, int width, int height): 绘制一个圆,其外接矩形左上角位于(x, y),宽度和高度分别由width和height指定。
7、fillOval(int x, int y, int width, int height): 绘制一个填充的圆。
8、drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): 绘制一个圆弧,其外接矩形左上角位于(x, y),宽度和高度分别由width和height指定,起始角度为startAngle,圆弧的角度为arcAngle。
9、fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): 绘制一个填充的圆弧。
绘制文本
1、drawString(String str, int x, int y): 在坐标(x, y)处绘制文本字符串str。这里的(x, y)指的是字符串基线(baseline)的起始位置,即左下角
2、drawChars(char[] data, int offset, int length, int x, int y): 绘制字符数组data中从offset开始的length个字符,起始位置在(x, y)。
3、drawBytes(byte[] data, int offset, int length, int x, int y): 绘制字节数组data中从offset开始的length个字节,起始位置在(x, y)。
绘制图像
1、drawImage(Image img, int x, int y, ImageObserver observer): 在坐标(x, y)处绘制图像img。其中image类需要创建,先将图片放在根目录下,并创建Image类对象:Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.png"));
2、drawImage(Image img, int x, int y, int width, int height, ImageObserver observer): 在坐标(x, y)处绘制图像img,并将其缩放到指定的width和height。
3、drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer): 在坐标(x, y)处绘制图像img,并使用指定的背景色bgcolor。
4、drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer): 在坐标(x, y)处绘制图像img,将其缩放到指定的width和height,并使用指定的背景色bgcolor。
其他绘图方法
1、setColor(Color c): 设置绘图的颜色。
2、setFont(Font font): 设置绘制文本时使用的字体。
3、setClip(int x, int y, int width, int height): 设置绘图区域的剪裁区域,只有剪裁区域内的部分才会被绘制。
// 绘制基本形状
g.drawLine(0, 0, 200, 200);//绘制一条从点(x1, y1)到点(x2, y2)的直线。
g.drawRect(2, 2, 200, 200);//绘制一个矩形,其左上角位于(x, y),宽度和高度分别由width和height指定。这个方法只绘制矩形的边框。
g.fillRect(5, 5, 10, 10);//绘制一个填充的矩形,其左上角位于(x,y),宽度和高度分别由width和height指定。
g.drawRoundRect(5, 5, 100, 200, 50, 50);//绘制一个圆角矩形,其左上角位于(x,y),宽度和高度分别由width和height指定,圆角的弧度由arcWidth和arcHeight指定。
g.fillRoundRect(5, 5, 100, 200, 50, 50);//绘制一个填充的圆角矩形。
g.drawRoundRect(5, 5, 100, 100, 200, 200);//绘制一个圆角矩形,其左上角位于(x,y),宽度和高度分别由width和height指定,圆角的弧度由arcWidth和arcHeight指定。//6g.drawOval(int x,int y,int width,int height);//绘制一个圆,其外接矩形左上角位于(x,y),宽度和高度分别由width和height指定。
g.fillOval(10, 10, 200, 200);//绘制一个填充的圆。
g.drawArc(5, 5, 100, 100, 200, 200);//绘制一个圆弧,其外接矩形左上角位于(x,y),宽度和高度分别由width和height指定,起始角度为startAngle,圆弧的角度为arcAngle。
g.fillArc(5, 5, 100, 100, 200, 200);//绘制一个填充的圆弧。
// 绘制文本
g.drawString("这是个字符串", 200, 200);//在坐标(x,y)处绘制文本字符串str。这里的(x,y)指的是字符串基线(baseline)的起始位置,即左下角
char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'};
g.drawChars(charArray, 1, 5, 100, 100);//绘制字符数组data中从offset开始的length个字符,起始位置在(x,y)。
byte[] bytes = {1, 2, 3, 4, 5, 6};
g.drawBytes(bytes, 1, 3, 200, 200);//绘制字节数组data中从offset开始的length个字节,起始位置在(x,y)。
// 绘制图像
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.png"));
g.drawImage(image, 20, 20, this);//在坐标(x,y)处绘制图像img。其中image类需要创建,先将图片放在根目录下,并创建Image类对象:Image image=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/.png"));//
g.drawImage(image, 20, 20, Color.blue, this);//在坐标(x,y)处绘制图像img,并使用指定的背景色bgcolor。
g.drawImage(image, 20, 20, 960, 528, Color.blue, this);//在坐标(x, y) 处绘制图像img,将其缩放到指定的width和height,并使用指定的背景色bgcolor。
// 其他绘图方法
g.setColor(Color.red);//设置绘图的颜色。
g.setFont(new Font("隶书", Font.BOLD, 20));//设置绘制文本时使用的字体。
g.setClip(0, 0, 100, 100);//设置绘图区域的剪裁区域,只有剪裁区域内的部分才会被绘制。
原文地址:https://blog.csdn.net/qq_65501197/article/details/142785835
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!