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) {

}

}

------解决思路----------------------

我记得论坛有个一模一样的帖子,你找找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值