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) {
}
}
------解決思路----------------------
我記得論壇有個一模一樣的文章,你找找。