在逐渐的了解了java后,我们开使通过编写画图板,来更加深入的认识和学习java编程。
在开始写画图板时以为能写的和windows中的画图板一样,后来才知道我想多了。我们所要实现的画图板,只是在面板上能够选择图形和颜色,然后画出自己想要的图形。
(一)
要想实现画图板我们首先要能够生成一个面板。
创建了窗体后,我们还可以对其大小,位置,标题,以及布局进行设置
最后我们还要把窗体显示在屏幕上
这样,一个窗体创建完成。
(二)
我们还要在窗体上添加按钮,来实现不同颜色和形状的实现。
首先,我们还要先创建一个按钮
创建完成后,还要添加到面板上
实现了按钮的添加,我们还要给按钮添加监听器。用来实现具体的动作。创建监听器,首先要先创建一个监听器类,并且要继承所要实现的监听器。如:
在继承后,要实现监听器中所有的功能。
在创建了监听器类后,还要在主函数中创建一个监听器对象,但如何把动作传给监听器,这就需要构造函数了
这样就实现了监听器的实现。我们所要实现的形状和颜色的按钮都是大同小异的。
(三)
即使我们获取了窗口,添加了按钮,我们仍旧不能在面板上画出图形,以为我们所获取的窗体是不可以改变颜色的。要想改变颜色,我们还需要获取画布,其目的就是是我们所获取的面板可以改变颜色。
这样我们就可以在这块画布上画出自己想要的图形了。
(四)
我们在完成了所有的工作后,当我们将窗体最小化后再大化,或者将窗体大小改变后,发现自己所绘制的图形不见了。这是因为我们在将窗体大小改变或小化后,窗体会从内存中取出来重绘,但我们所画的图形并没有保存在内存中,所以并不会重绘图形,从而我们的图形会消失。
要想实现图形的重绘,就要先将我们所绘制的图形保存起来。我们首先需要创建一个图形类。里面包含图形的基本要素。
图形类中还要包含获取坐标以及设置坐标的方法。
然后创建图形类的对象,我们可以用数组来实现也可以用队列来实现。没画完一个图形就将我们所绘制的图形的坐标、颜色等信息保存到数组中
在保存完后,我们还需要将图形重绘,实现重绘我们首先需要创建一个Mypanel类,用来继承JPanel类。在Mypanel类中实现窗体及图形的重绘。
最后我们就实现了窗体的重绘功能。
在开始写画图板时以为能写的和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);
}
}
}
最后我们就实现了窗体的重绘功能。