我一直在做一个程序,用JLabel
画一条画线。创建这些行后,我想删除我绘制的那些行。例如,我想删除
d.drawLine(label.getGraphics(), 120,215,330,120);
答案 0 :(得分:4)
绘图不是那样的。一旦绘制一条线,它就不再作为一条线存在,就像一堆与所有其他像素在功能上不同的像素一样。但是有一些可行的解决方法:
Line
课程并保留一份列表。如果要删除一行,请将其从列表中删除,清除所有行,然后重新绘制列表中的所有行。答案 1 :(得分:2)
您无法删除GUI上的任何内容。你所能做的只是继续写在那里的顶部。如果要将黑色线条更改回白色背景,可以在顶部写下白线。
答案 2 :(得分:2)
我认为你将画布类型实现(Java)与图形DOM树类型实现(例如浏览器中的SVG)混淆。
在DOM实现中,您可以删除元素并让应用程序解决脏区域的问题,并重新绘制具有属于该脏区域(通常是矩形)的部分的任何元素。
在像Java这样的画布实现中,您直接绘制到图形对象,一旦绘制,画布就不知道您绘制的位置。通常,您需要实现一种机制来计算脏的内容并重新绘制受影响区域中的组件。这种机制称为scene graph。
答案 3 :(得分:1)
label.revalidate();
label.repaint();
...
public void paintComponent(Graphics g) { do not draw lines but the rest }
绘图基于事件发生,因此您将绘图代码放入paintComponent或paint中。 重绘可以触发i.a.带着重画。