欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java GUI编程之paint绘制操作示例

程序员文章站 2022-03-11 21:13:31
本文实例讲述了java gui编程之paint绘制操作。分享给大家供大家参考,具体如下: import java.awt.*; public class testpint...

本文实例讲述了java gui编程之paint绘制操作。分享给大家供大家参考,具体如下:

import java.awt.*;
public class testpint {
    public static void main(string[] args) {
//        new tfpaint().lunchpaint();
        new tfpaint();
    }
}
class tfpaint extends frame{
    /*
    public void lunchpaint() {
        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);
    }
    public void paint(graphics g) {
        color c = 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类的一个方法,其能够实现绘图的功能,其是本身自带的方法,我们相当于重写了这个方法,在调用时我们用到了参数(graphics g),一个画笔,用g来实现绘画,frames是container的一个子类,所以我们在frame里重写了paint方法。

注;color c = g.getcolor(),和g.setcolor(c),相当于把画笔用完后,重新置为原来的颜色。

paint 的一个实例,外加mousemonitor的介绍。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class testpaint2 {
    public static void main(string[] args) {
        new tfpaint("draw");
    }
}
class tfpaint extends frame{
    arraylist pointlist = null;
    tfpaint(string s){
        super(s);
        pointlist = new arraylist();
        this.setlayout(null);
        this.setbounds(200, 200, 400, 400);
        this.setbackground(color.blue);
        this.setvisible(true);
        this.addmouselistener(new mymousemonitor());
    }
    public void paint(graphics g ) {
        iterator i = pointlist.iterator();
        while(i.hasnext()) {
            point p = (point)i.next();
            g.setcolor(color.black);
            g.filloval(p.x, p.y, 10, 10);
        }
    }
    public void addpoint(point p) {
        pointlist.add(p);
    }
}
class mymousemonitor extends mouseadapter{
    public void mousepressed(mouseevent e) {
        tfpaint f = (tfpaint) e.getsource();
        f.addpoint(new point(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,是将画面重新显示出来,感觉相当于刷新界面,如果没有,在界面上虽然有点但是他不显示,只有重传界面(即界面刷新时才会出现)