java GUI编程之paint绘制操作示例
本文实例讲述了javaGUI编程之paint绘制操作。分享给大家供大家参考,具体如下:
importjava.awt.*;
publicclassTestpint{
publicstaticvoidmain(String[]args){
//newTFPaint().lunchPaint();
newTFPaint();
}
}
classTFPaintextendsFrame{
/*
publicvoidlunchPaint(){
this.setBounds(200,200,640,640);
this.setBackground(Color.BLUE);
this.setVisible(true);
}
*/
TFPaint(){
this.setBounds(200,200,200,200);
this.setBackground(Color.BLUE);
this.setVisible(true);
}
publicvoidpaint(Graphicsg){
Colorc=g.getColor();
g.setColor(Color.BLACK);
g.fillRect(60,60,30,30);
g.setColor(Color.CYAN);
g.fillOval(80,80,40,40);
g.setColor(c);
}
}
paint方法是container类的一个方法,其能够实现绘图的功能,其是本身自带的方法,我们相当于重写了这个方法,在调用时我们用到了参数(Graphicsg),一个画笔,用g来实现绘画,Frames是container的一个子类,所以我们在Frame里重写了Paint方法。
注;Colorc=g.getColor(),和g.setColor(c),相当于把画笔用完后,重新置为原来的颜色。
Paint的一个实例,外加MouseMonitor的介绍。
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
publicclassTestPaint2{
publicstaticvoidmain(String[]args){
newTFpaint("Draw");
}
}
classTFpaintextendsFrame{
ArrayListpointList=null;
TFpaint(Strings){
super(s);
pointList=newArrayList();
this.setLayout(null);
this.setBounds(200,200,400,400);
this.setBackground(Color.blue);
this.setVisible(true);
this.addMouseListener(newMyMouseMonitor());
}
publicvoidpaint(Graphicsg){
Iteratori=pointList.iterator();
while(i.hasNext()){
Pointp=(Point)i.next();
g.setColor(Color.BLACK);
g.fillOval(p.x,p.y,10,10);
}
}
publicvoidaddPoint(Pointp){
pointList.add(p);
}
}
classMyMouseMonitorextendsMouseAdapter{
publicvoidmousePressed(MouseEvente){
TFpaintf=(TFpaint)e.getSource();
f.addPoint(newPoint(e.getX(),e.getY()));
f.repaint();
}
}
基本要求:实现在一个界面上鼠标每点击一下,就会生成一个点,
基本思路:要有一个Frame,用来显示界面,由于需要在这个界面上产生点,所以我们有鼠标点击产生点,即有对鼠标的监听,而我们要在监听后产生点,所以我们有Paint方法用来绘图,而他绘制的图就是产生一个点。
其中较为麻烦的就是,必须在指定位置(即鼠标点击的位置产生一个点)如何来找到这个位置,在此时我们在MouseMonitor中利用e.getSource获得信息,其中e是点击这个事件发生时,我们把他包装成一个类,传输给Monitor(其内部含有事件处理方法)
注:在Frame中我们要显示多个点,所以我们建立了一个ArrayList,用来存储点类型数据,在Frame中存储的过程就相当于画在了上面,
getSource是重新定义到一个新的来源,如上文,我们把e的getSource赋值给了f(一个Frame)相当于对frame进行添加,即Frame拿到了属于Monitor的画笔,我们通过e.getx,e和e.gety,进行定位,x,y,确定的就是鼠标点击的点,addpoint,相当于点一下在Frame上添加一个点,而print就是把哪些点用圆圈表示出来,
由于点数据是用ArrayList存储的所以对应的我们进行索引的时候用了Iterator,只要在列表里有一个点就用圆圈表示出来。
repaint,是将画面重新显示出来,感觉相当于刷新界面,如果没有,在界面上虽然有点但是他不显示,只有重传界面(即界面刷新时才会出现)
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。