java中repaint()怎么样能只清除某一条线?怎么样可以不清楚原来已经画了的?

 我来答
帐号已注销
2011-01-13 · TA获得超过5622个赞
知道大有可为答主
回答量:1459
采纳率:0%
帮助的人:1375万
展开全部
一般来说你需要用一个数组或者其他数据结构来记录画的内容数据。然后 paint 的时候读取数组并对应地画到屏幕上。因为 paint 是不主动记录数据的,所以一旦画出来再要去掉就很麻烦,而且因为它不保存数据,所以一旦绘制区域被遮盖或者移出了屏幕区域就会整块被擦掉。

比如我举个例子,你要只画直线的话,可以用一个数组或两个数组记录两端点的坐标(如果要颜色等信息就同样可以很方便地扩展,比如加一个数组什么的)。如果一开始是不确定线条数的你就用一个 Vector 或者 ArrayList 来做个动态数组,反正把每条线的两端点都记录下来,然后删除一条线就只需要在数组中把对应的端点坐标 remove 掉,然后调用 repaint:

import java.util.Vector;
import java.awt.Graphics;
import java.awt.JPanel;
import java.awt.Point;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;

public class MyPanel extends JPanel implements MouseListener, MouseMotionListener, KeyListener {
private Vector<Point> endPoints1 = new Vector<Point>();
private Vector<Point> endPoints2 = new Vector<Point>();

public MyPanel () {
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
}

@Override public void paint (Graphics g) {
super.paint(g);
for (int i=0; i<endPoints1.size(); i++)
g.drawLine(endPoints1.get(i).x, endPoints1.get(i).y, endPoints2.get(i).x, endPoints2.get(i).y);
requestFocus();
}

......//其他你自己写

public void addLine (Point p1, Point p2) {
endPoints1.add(p1);
endPoints2.add(p2);
repaint(); //在这里调用 repaint
}

public void removeLine (Point p1, Point p2) {
endPoints1.remove(p1);
endPoints2.remove(p2);
repaint(); //同样在这里调用 repaint
}
}

剩下的包括选择删除哪条线之类的你自己写吧。这是一个整条线处理的例子,就是一个矢量图。如果只是位图的话那就是类似橡皮擦的工具,在屏幕上画一个和背景颜色相同的小矩形或者圆形覆盖掉那个区域就行了。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式