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) {
}
}
------解决思路----------------------
我记得论坛有个一模一样的帖子,你找找。