哪个语句清除以前的图形并在Java中绘制新图形?
代码如下:哪个语句清除以前的图形并在Java中绘制新图形?,java,swing,graphics,awt,Java,Swing,Graphics,Awt,代码如下: public void paint(Graphics g) { g.fillOval(x, y, 25, 25); repaint(); } 这将创建一个这样的输出,如果我移动指针,它不会清除前面的图形并创建一个路径 通过像这样添加super语句,它不会显示路径,只显示椭圆图形的当前位置 public void paint(Graphics g) { super.paint(g); g.fillOval(x, y, 25, 25);
public void paint(Graphics g) {
g.fillOval(x, y, 25, 25);
repaint();
}
这将创建一个这样的输出,如果我移动指针,它不会清除前面的图形并创建一个路径
通过像这样添加super语句,它不会显示路径,只显示椭圆图形的当前位置
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, y, 25, 25);
repaint();
}
我只想了解这背后的机制和原因。对不起,您的代码有太多错误,我们必须修复它:
- 首先,不要重写JComponent(或JFrame)的paint方法,而是重写JComponent或JPanel的paintComponent。这样可以避免错误地混淆边框或子组件的绘制,而这两者都是由绘制造成的。此外,由于paintComponent具有自动双缓冲功能,因此动画将更加平滑
- 接下来,您几乎总是希望调用super的绘制方法,对于paintComponent,该方法是
,因为这将继续传播绘制链,而不调用它则会破坏该链。调用super的方法将调用组件的内务处理绘制,包括“脏”像素的过度绘制,这就是轨迹被删除的原因。这很可能是您正在寻找的答案super.paintComponent(g)
- 最重要的是,不要在任何绘制方法中调用
。这样做会产生一个完全无法控制的穷人动画,并将太多的责任放在绘画方法上,而绘画方法应该专注于其唯一的工作——绘制组件。使用一个游戏循环,比如摆动计时器repaint()
- :Swing图形的入门教程
- :Swing图形高级教程
- 首先,不要重写JComponent(或JFrame)的paint方法,而是重写JComponent或JPanel的paintComponent。这样可以避免错误地混淆边框或子组件的绘制,而这两者都是由绘制造成的。此外,由于paintComponent具有自动双缓冲功能,因此动画将更加平滑
- 接下来,您几乎总是希望调用super的绘制方法,对于paintComponent,该方法是
,因为这将继续传播绘制链,而不调用它则会破坏该链。调用super的方法将调用组件的内务处理绘制,包括“脏”像素的过度绘制,这就是轨迹被删除的原因。这很可能是您正在寻找的答案super.paintComponent(g)
- 最重要的是,不要在任何绘制方法中调用
。这样做会产生一个完全无法控制的穷人动画,并将太多的责任放在绘画方法上,而绘画方法应该专注于其唯一的工作——绘制组件。使用一个游戏循环,比如摆动计时器repaint()
- :Swing图形的入门教程
- :Swing图形高级教程
- 很抱歉,您的代码有太多错误,我们必须修复它:
正如他所说,super.paint()可以清除脏像素。这说明了一切。!!:) 你能解释一下为什么会发生,为什么不会发生第二次吗。我是新来的,所以你能少一点吗technical@TusharSharma我已经做了。super的方法清除“脏”像素——参见上面的第2点。非常感谢:)现在我知道我可以深入研究了。你能解释为什么会发生,为什么不会发生第二次。我是新来的,所以你能少一点吗technical@TusharSharma我已经做了。super的方法清除“脏”像素——参见上面的第2点。非常感谢:)现在我知道我可以潜水更深,但如果我们使用双缓冲区而不使用super.paint();它也起作用。为什么?在双缓冲中,不是逐个绘制对象,而是在图像上绘制对象,然后告诉渲染器绘制整个图像;它也起作用。为什么?在双缓冲中,不是逐个绘制对象,在图像上绘制它们,然后告诉渲染器绘制整个图像。为什么不尝试将以前绘制的对象颜色填充为背景色。希望这可能有助于解决您的问题。为什么不尝试将以前绘制的对象颜色填充为背景色。希望这可能有助于解决您的问题。