Java简单图形绘制以及常见问题的说明

前言:

在学习java的过程中,我最近接触到了与图形绘制相关的内容。为了完成学业中的作业,我拜读了许多大佬的文章和程序。现在作业倒是做完了,为了让自己最近所学有所属,我决定整理一下。若我所写有误,欢迎大佬批评指正。

关于简单绘制时图形容器的选择:

首先,有个前提得说明白。我们绘制图形时,自然是调用Graphics类进行绘制。但是绘制好的图形,我们总该找个容器来装吧。因此,可供选择的容器就有awt的子类Panel和Canvas类。Canvas可理解为画布,是容器的一种。而Panel类也为容器,两者皆可容纳Graphics的对象,但是Panel类可容纳对象的种类更多。当然,我们在单纯绘制简单图形时,使用Canvas类没有任何问题。但是使用Panel类,明显程序可塑性和可维护性会变得更强。在java中也有Javax.swing.JPanel对Panel进行拓展。在我们初学时,Panel其实已经够用。

import javax.swing.JFrame;//框架
import javax.swing.JPanel;//容器
import java.awt.Canvas;

 关于Graphics与Graphics2D之间的关系:

java对Graphics进行了拓展,也就是说Graphics2D是Graphics的拓展。我们在使用Graphics的时候,经常会看见它们的强制转换。将Graphics转化为Graphics2D类型进行使用,我在书写程序时也经常这样做。

 Graphics2D gx=(Graphics2D) g;

 关于常用的Graphics图形绘制工具:

画直线:

abstract void drawLine(int x1,int y1,int x2,int y2) 调用该函数可以画一条从(x1,y1)到(x2,y2)的直线

	gk.drawLine(gw*i,0,gw*i,180);

画椭圆(圆):

abstract void drawOval(int x, int y, int width, int height) 调用该函数可以画一个空心椭圆。形参表示这个椭圆的外接矩形的信息。x,y表示外接矩形左上角的坐标,width和height即外接矩形的宽高。在此基础上进行变行,将外界矩形变为一个正方形,即可画出一个圆来。

public abstract void fillOval(int x, int y, int width, int height) 调用该函数可以画一个实心椭圆。其它参数信息与画空心椭圆的函数一致。

gk.drawOval(20,20,20,20);//空心圆
gk.fillOval(80,80,20,20);//实心圆

画矩形:

abstract void drawRect(int x, int y, int width, int height ) 调用该函数,可以绘制一个矩形。x,y是矩形左上角的点的坐标,width和height为矩形的宽高

abstract void fillRect(int ,x, int y, int width, int height ) 调用该函数可以画一个实心矩形。同理x,y是矩形左上角的一个点,而width和height是矩形的宽高

	gx.fillRect(x,y,20,20);//绘制方形
    gx.drawRect(x,y,20,20);//绘制空心矩形

当然我们还有其它绘制图像的函数,从这点来说,java还是很方便的。其它函数可以去查查jdk手册,简单方便。

设置线条颜色:

我们经常遇到这样的需求,就是要求设置所绘制的图形的颜色。没有颜色,图形绘制出来难免显得单调。我们graphics刚好有设置线条颜色的函数。

abstract void setColor( Color c )调用这个函数可以设置线条颜色,其实就是相当于设置绘画时画笔的颜色。默认的画笔颜色,可以认为是黑色的。形参呢,其实就是Color的对象。而我们Color中设置了封装好的颜色对象,比如Color.RED,Color.BLUE。我们也可以手动设置RGB颜色对象。说到这里我们就不得不提,使用Color对象的时候要对Color库进行引用。Color是属于awt中的库。其引用代码可以这样写。

import java.awt.Color;//色彩

 我们在画图前预先设置好画笔的颜色,再进行图像绘制,就可以得到我们想要颜色的图像了。至于实心图形的绘制,也是一样的道理。我们只需要将画笔理解为颜料就可以了。

Graphics2D gx=(Graphics2D) g;
gx.setColor(Color.GREEN);//改变画笔颜色
gx.fillOval(x,y,20,20);//绘制圆形

 一个绘图实例:

我个人觉得这个例子在这一模块来说可能不太好。因为该题涉及了和鼠标的交互,作为一个单纯对图像绘制解说的例子,可能会存在干扰。但是我手头暂时没有好的例子。说直白点,就是作者太懒,没有预先写好适合例子的代码,各位读者讲究一下吧。

编写Java程序,创建一个窗体,并实现交互。在窗体内“单击鼠标左键”,在光标处绘制一个“绿圆”;窗体内“单击鼠标右键”,在光标处绘制一个“红色方框”;窗体内“双击鼠标左键”,清空所有已画“圆”和“方”。

其它得地方我就不拿出来了,我就把我设置图形的部分拿出来分享吧

class MyJpanel extends JPanel{
	int x,y;
	int num=0;
	public void paint(Graphics g){
		Graphics2D gx=(Graphics2D) g;
		if(num==1){
			gx.setColor(Color.GREEN);//改变画笔颜色
			gx.fillOval(x,y,20,20);//绘制圆形
		}//单击左键
		else if(num==3){
			gx.setColor(Color.WHITE);
			super.paint(gx);//清除画面内容
		}//双击左键
		else if(num==2){
			gx.setColor(Color.RED);
			gx.fillRect(x,y,20,20);//绘制方形
		}//单击右键
	}
}//容器

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值