画图板与重绘

在逐渐的了解了java后,我们开使通过编写画图板,来更加深入的认识和学习java编程。
在开始写画图板时以为能写的和windows中的画图板一样,后来才知道我想多了。我们所要实现的画图板,只是在面板上能够选择图形和颜色,然后画出自己想要的图形。
(一)
要想实现画图板我们首先要能够生成一个面板。

//创建窗体
javax.swing.JFrame jf=new javax.swing.JFrame("QQ2014");

创建了窗体后,我们还可以对其大小,位置,标题,以及布局进行设置

//设置窗体的大小
jf.setSize(200, 200);
//设置窗体的位置
jf.setLocationRelativeTo(null);
//设置完全关闭
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置流式布局
jf.setLayout(new FlowLayout());

最后我们还要把窗体显示在屏幕上

//显示窗体
jf.setVisible(true);

这样,一个窗体创建完成。
(二)
我们还要在窗体上添加按钮,来实现不同颜色和形状的实现。
首先,我们还要先创建一个按钮

javax.swing.JButton jb_start=new javax.swing.JButton("登录");

创建完成后,还要添加到面板上

//将组件添加到窗口
jf.add(lab_pas);

实现了按钮的添加,我们还要给按钮添加监听器。用来实现具体的动作。创建监听器,首先要先创建一个监听器类,并且要继承所要实现的监听器。如:

public class DrawListener extends java.awt.event.MouseAdapter{

在继承后,要实现监听器中所有的功能。
在创建了监听器类后,还要在主函数中创建一个监听器对象,但如何把动作传给监听器,这就需要构造函数了

//构造函数
public DrawListener(Graphics gr,ShapeListener slis,ColorListener clis){
this.gr=gr;
this.slis=slis;
this.clis=clis;
}


// 建立鼠标监听器对象
DrawListener mouse = new DrawListener(g, slis,clis);

这样就实现了监听器的实现。我们所要实现的形状和颜色的按钮都是大同小异的。
(三)
即使我们获取了窗口,添加了按钮,我们仍旧不能在面板上画出图形,以为我们所获取的窗体是不可以改变颜色的。要想改变颜色,我们还需要获取画布,其目的就是是我们所获取的面板可以改变颜色。

// 获取画布
java.awt.Graphics g = jp_south.getGraphics();

这样我们就可以在这块画布上画出自己想要的图形了。
(四)
我们在完成了所有的工作后,当我们将窗体最小化后再大化,或者将窗体大小改变后,发现自己所绘制的图形不见了。这是因为我们在将窗体大小改变或小化后,窗体会从内存中取出来重绘,但我们所画的图形并没有保存在内存中,所以并不会重绘图形,从而我们的图形会消失。
要想实现图形的重绘,就要先将我们所绘制的图形保存起来。我们首先需要创建一个图形类。里面包含图形的基本要素。

public class Myshape {
//声明图形基本元素
private int x1;
private int x2;
private int y1;
private int y2;
private Color color;
private String type;
}

图形类中还要包含获取坐标以及设置坐标的方法。
然后创建图形类的对象,我们可以用数组来实现也可以用队列来实现。没画完一个图形就将我们所绘制的图形的坐标、颜色等信息保存到数组中

Myshape shape=new Myshape();
shape.setX1(x1);
shape.setY1(y1);
shape.setX2(x2);
shape.setY2(y2);
shape.setColor(clis.getColor());
shape.setType(type);
//将图形保存到数组中
if(count<shapearray.length){

shapearray[count]=shape;
count++;
}

在保存完后,我们还需要将图形重绘,实现重绘我们首先需要创建一个Mypanel类,用来继承JPanel类。在Mypanel类中实现窗体及图形的重绘。

public class Mypanel extends JPanel{

public void paint(Graphics g){
//重绘窗体
super.paint(g);

for(int i=0;i<DrawListener.count;i++){

DrawListener.shapearray[i].draw(g);
}

}

}

最后我们就实现了窗体的重绘功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值