1. 程式人生 > 程式設計 >java GUI程式設計之paint繪製操作示例

java GUI程式設計之paint繪製操作示例

本文例項講述了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);
        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,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,是將畫面重新顯示出來,感覺相當於重新整理介面,如果沒有,在介面上雖然有點但是他不顯示,只有重傳介面(即介面重新整理時才會出現)

更多關於java演算法相關內容感興趣的讀者可檢視本站專題:《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》

希望本文所述對大家java程式設計有所幫助。