我正在尝试使用Swings构建PaintBrush。我想在其中一个JPanel上进行自由手绘,所以我覆盖了它的PaintComponent,并绘制了一些东西,它很好。但我没有得到任何背景,我需要白色背景,所以我在paintComponent()中调用了super.paintComponent(g),现在我能够获得背景,但每次我的repaint()都在mouseDragged事件上调用,我丢失我以前在JPanel上的绘图。 有什么方法可以获得背景颜色,而且我以前的绘图也没有丢失?
任何帮助都将不胜感激。谢谢
JPanel paintComponent()
public void paintComponent(Graphics g) {
// super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(xpos, ypos, 5, 5);
}
的mouseDragged()
public void mouseDragged(MouseEvent arg0) {
xpos= arg0.getX();
ypos= arg0.getY();
repaint();
}
答案 0 :(得分:2)
如果使用通过在组件上调用getGraphics()
获得的Graphics对象进行绘制,通常会发生这种情况,因为这样获得的Graphics对象不是持久的。所有绘图都应该在paintComponent中或从paintComponent调用的方法中完成。
修改强>
好的,谢谢您发布一些代码。所以我看到你在代码中只绘制了一个椭圆形,所以super会阻止你画一条线就不足为奇了。
可能的解决方案:
mouseDragged(...)
方法中,将点数添加到List<Point>
并在paintComponent(...)
方法中,迭代绘制线条的列表(设置Graphics2D笔划以更改线条粗细)例如,请查看我的StackOverflow对此问题的回答:Changing JPanel Graphics g color drawing line