画图板的实现

这节课我们学习了Java画图板的相关内容,主要要求是设计出一个能进行基本绘图的Java画板,包括:矩形、圆形、直线、典型三角形、立方体图形等基本构图要素,具体要实现图形界面的开发。

一、画板界面设计。按照之前学习的界面设计的知识,设计出一个简单美观的作图界面,按照流式布局在上方设置选择不同作图方式的Button,分别是:矩形、圆形、直线、典型三角形、立方体图形,给按钮添加动作事件监听方法,并将DrawingListener的实例化对象作为参数赋给ActionListener。下方就是绘图画布区域,设置位置、大小、颜色、布局、显示可见等,这样界面基本设计完毕。
画图板界面设计完毕

二、确定实现目标。在窗体上按下鼠标按键,然后释放鼠标按键,根据按下和释放的坐标值来绘制一个图形。要实现这个功能,就要用到事件监听机制,先确定事件源对象:JFrame窗体容器组件对象。使用的事件监听方法是addMouseListener(MouseListener I),即鼠标动作监听方法,用来捕获事件源对象上的鼠标按键按下,释放,点击动作还会捕捉鼠标进入和离开事件源对象的动作;接着收集事件源对象的信息和动作信息,将信息交给MouseListener事件接口的对象进行处理。

三、具体实现步骤

针对按钮进行监听。选择不同的绘图方式时需要通过点击按钮来实现,此时,事件接口使用MouseListener鼠标事件处理类接口,提供处理按下、释放、点击、进入和离开动作等动作的事件处理方法,用来监听鼠标上的相关动作。当MouseListener的对象接收到信息后,就会根据动作去调用对应的事件处理方法。
注意:在实现ActionListener接口时,必须要对其进行重写,对他点击鼠标右键,选择open Declaration,会弹出以下源代码:

public interface ActionListener extends EventListener {
/**
 * Invoked when an action occurs.
 * @param e the event to be processed
 */
public void actionPerformed(ActionEvent e);
}

选择最后一行源代码复制到DrawingListener事件处理类中,对他进行方法重写。重写时,要重新定义一个有初值的字符串,然后将按钮上的文字赋给字符串,在具体绘制图形时把字符串作为判断是否执行的依据。

针对绘图动作进行监听

进行具体绘图操作时,需要通过监听鼠标的点击、按下、释放、进入、离开动作,因此需要用到重新定义一个类来实现鼠标事件接口:

1.定义DrawingListener事件处理类,该类实现MouseListener鼠标事件接口,重写接口中的抽象方法,与重写ActionListener事件处理类的方法相同,重写用到的方法:

public void mouseClicked(MouseEvent e){
	System.out.println("点击");
}
public void mousePressed(MouseEvent e){
	System.out.println("按下");
}
public void mouseReleased(MouseEvent e){
	System.out.println("释放");
}
 public void mouseEntered(MouseEvent e){
	System.out.println("进入");
} 
public void mouseExited(MouseEvent e){
 	System.out.println("离开");
}

A.声明类中的四个属性,用来存储按下和释放的坐标值;
B.在按下的方法中获取按下坐标值;
C.在释放的方法中获取释放坐标值;
D.声明Graphics画笔对象属性,然后根据坐标值来绘制图形。

2.实例化DrawingListener事件处理类对象,命名为dl;获取窗体上的画笔对象frame.getGraphics(),然后将画笔对象传递到dl对象中的g属性。

3.给JFrame窗体事件源对象,添加addMouseListener()鼠标动作监听方法,明确事件处理类的对象为dl。实际绘图时,对于直线、矩形和圆形,Java中都有固定的作图方法,只需要两点(x1,y1),(x2,y2)就能轻易做出:

g.fillRect(x1, y1, x2 - x1, y2 - y1);
g.drawOval(x1, y1, x2 - x1, y2 - y1);
g.drawLine(x1, y1, x2, y2);

但对于三角形、立方体就没有那么容易了,需要用巧妙的方法来实现,由于初学编程能力还不高,只能简单化处理,如三角形简化为等腰三角形和直角三角形,立方体的阴影长度提前设定好,就会比较容易实现。
这就是绘图的结果
在进行选择性绘图前,再添加几个按钮,分别命名为黑色、红色、绿色来设置画笔颜色,在写绘图方法前,加入条件语句,通过监听颜色按钮是否被点击来设置画笔的颜色,使画笔的功能更加丰富、有特点。

后期可以把画图板逐渐完善,目前所做出来的画图板存在以下***几个问题***:

1.**画板功能过于简单,所能绘制的图形太少,所能选择的颜色也过于基础。**应该尽可能多的绘制各种不同图形,使画板功能更加丰富,顺便增加颜色的选择,方便画出更优美的图案。

2.**对于某些绘图函数,只能在坐标(x1, y1)小于(x2, y2)的时候画图,一旦鼠标不是从左上画到右下,就会出现错误,甚至不能画出,**比如drawRect函数,fillRect函数等,在实现时总会出现瑕疵,所以将坐标(x1, y1)(x2, y2)可能出现的所有大小情况全部列出来,分别在不同情况下进行绘制,这样就能将画板进一步完善。

3.**所绘制的图形不能擦出或者更改,**这就无法修改所画出的图形,现在也要将清除功能添加到画板上,丰富其功能,具体只需要调用g.clearRect函数就可以清除画出的矩形区域内的内容。
在这里插入图片描述
这样,画板比起之前来,无疑既好看了许多,功能也变得更加丰富了,日后在所学内容更多的情况下,可以进一步对画板的界面进行优化,把功能进一步完善,参考windows系统中自带的画板,甚至以后可以像其他画图软件一样,把画的图形保存为一张图片储存到电脑上,更多功能需要以后继续完善…

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值