- 画图板
接着上节课QQ界面的设计,这节课我们主要学习如何设计出一个能进行基本绘图的Java画板,在界面上用鼠标画出直线,矩形,圆等基本图形。
一,首先我们需要创建一个界面,上节课我们已经学会了如何创建界面,现在可以学以致用了。创建界面的步骤如下:
a.新建一个界面类,定义一个显示界面的方法
b.创建窗体对象,设置窗体属性值,大小、显示位置、布局等
c.创建元素组件对象,设置各个组件的属性,添加元素组件到顶级组件窗体上
d.设置窗体可见 //这一步必不可少,非常重要(窗体要在添加的组件后面设置可见,否则可能出错)
e.在主方法中创建界面的对象,调用显示界面的方法。
import java.awt.Graphics;
import javax.swing.JFrame;
public class Drawpad {
//创建一个初始化界面的方法
public void initUI(){
JFrame jf=new JFrame();
jf.setTitle("七巧画图板!!!");
jf.setSize(800,800);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
jf.setVisible(true);
//取画笔 Graphics
Graphics gl=jf. getGraphics();
//给界面添加监听器
DrawListener dl=new DrawListener();
jf.addMouseListener(dl);
dl.g=gl;//传值
}
//主方法
public static void main(String[]args){
Drawpad dp=new Drawpad();
dp.initUI();
}
}
二、鼠标监听器
在窗体上按下鼠标按键,然后释放鼠标按键,根据按下和释放的坐标值来绘制一个图形。要实现这个功能,就要用到事件监听机制,先确定事件源对象:JFrame窗体容器组件对象。使用的事件监听方法是jf.addMouseListener(dl),即鼠标动作监听方法,用来捕获事件源对象上的鼠标按键按下,释放,点击动作还会捕捉鼠标进入和离开事件源对象的动作;接着收集事件源对象的信息和动作信息,将信息交给MouseListener事件接口的对象进行处理。
注意:在实现MouseListener 接口时,重写接口中的抽象方法,对他点击鼠标右键,选择open Declaration,会弹出以下源代码,将所有的抽象方法复制过来,将每一个抽象中的分号改为花括号。
三、重新创建一个类来实现鼠标事件接口
步骤如下:
1、.定义DrawingListener事件处理类,该类实现MouseListener鼠标事件接口,重写接口中的抽象方法,
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.声明类中的四个属性int x1,y1,x2,y2,用来存储按下和释放的坐标值;
b.在按下的方法中获取按下坐标值;
c.在释放的方法中获取释放坐标值;
d.声明Graphics画笔对象属性,然后根据坐标值来绘制图形。
2、实例化DrawingListener事件处理类对象,命名为dl;获取窗体上的画笔对象jf.getGraphics(),然后将画笔对象传递到dl对象中的g属性。
//取画笔 Graphics
Graphics gl=jf. getGraphics();
//给界面添加监听器
DrawListener dl=new DrawListener();
jf.addMouseListener(dl);
dl.g=gl;//传值
3.给JFrame窗体事件源对象,添加addMouseListener()鼠标动作监听方法,明确事件处理类的对象为dl。实际绘图时,对于直线、矩形和圆形,Java中都有固定的作图方法,只需要两点(x1,y1),(x2,y2)就能轻易做出。但需要注意的是,绘制矩形的时候需要用到最小值min函数、绝对值abs函数来绘制矩形的四种趋向,我刚一开始用if语句来写,太累赘复杂了。
Math.min(x2, x1);
Math.min(y1, y2);
Math.abs(x2-x1);
Math.abs(y2-y1);
g.drawRect(Math.min(x2, x1), Math.min(y1, y2),Math.abs(x2-x1), Math.abs(y2-y1));
以上就为简陋简单的界面画图板了,由于初学编程能力还不高,还有很多很多功能没有实现,一步一个脚印,慢慢来~