天天看點

java repaint 速度,java repaint()

java repaint()求助

我想要實作在滑鼠點選的位置繪制一個方塊,繪制新的方塊的同時保留已經繪制的方塊,可是現在繪制新圖形的時候,原有圖形被覆寫,求大神幫忙import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JDesktopPane;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.JPanel;

public class Test extends JFrame implements MouseListener {

int x;

int y;

int flag;

public static void main(String[] args){

Test test= new Test();

test.setVisible(true);

}

public Test() {

setSize(300,200);

DrawPanel drawtable= new DrawPanel();

drawtable.addMouseListener(this);

setContentPane(drawtable);

}

public class DrawPanel extends JPanel{

public void paint(Graphics g){

Graphics2D g2= (Graphics2D) g;

if(flag==1){

draw1(g2,x,y);

System.out.println(x);

System.out.println(y);

}

}

public void draw1(Graphics2D g2,int x,int y){

g2.setColor(Color.BLACK);

g2.fillRect(x, y, 10,10);

}

}

@Override

public void mouseClicked(MouseEvent e) {

x=e.getX();

y=e.getY();

flag=1;

repaint();

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

}

------解決思路----------------------

你需要用一個成員變量記憶你以前的操作,我大概改了一下,能實作你的想法,給你做個參考。

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Point;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.ArrayList;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Test extends JFrame implements MouseListener {

int x;

int y;

int flag;

//這個對象提成成員變量,是為了友善操作它

private DrawPanel drawtable;

public static void main(String[] args) {

Test test = new Test();

test.setVisible(true);

}

public Test() {

setSize(300, 200);

drawtable = new DrawPanel();

drawtable.addMouseListener(this);

setContentPane(drawtable);

}

public class DrawPanel extends JPanel {

//新增成員,用于儲存每次操作所點的位置

private ArrayList points;

// 建立了一構造方法,初始化點清單

public DrawPanel() {

points = new ArrayList();

}

//新增方法,用于向點清單增加一個點

public void addPoint(Point p) {

points.add(p);

//點變化了,申請重繪

repaint();

}

//這個方法做了點兒修改

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.BLACK);

//周遊點清單,重繪界面

Point p;

for (int i = 0; i 

p = points.get(i);

g2.fillRect((int) p.getX(), (int) p.getY(), 10, 10);

}

}

}

@Override

public void mouseClicked(MouseEvent e) {

x = e.getX();

y = e.getY();

//這裡不再直接操作drawtable,而是讓DrawPanl對象增加一個點

drawtable.addPoint(new Point(x, y));

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

}

------解決思路----------------------

我記得論壇有個一模一樣的文章,你找找。