Java repaint()轻弹

时间:2016-06-04 14:12:01

标签: java swing netbeans

我在java中有自定义绘制方法

@Override
public void paint(Graphics g) {
    super.paintComponents(g);
    Graphics2D g2 = (Graphics2D) buffer.getGraphics(); 
    g2.setColor(java.awt.Color.WHITE);
    g2.fillRect(0, 0, jPanel1.getWidth(), jPanel1.getHeight());
    //paint some custom graphic forms
    g2 = (Graphics2D) jPanel1.getGraphics();
    g2.drawImage(buffer, 0, 0, jPanel1.getWidth(), jPanel1.getHeight(), null);

}

当用户拖动鼠标时,我更新图形表格的位置并调用

重绘(); 在方法的最后

我的问题是表单更新正确,但有一个烦人的电影。我怎么解决这个电影?提前谢谢

2 个答案:

答案 0 :(得分:0)

如果没有看到更多代码,最好是minimal compilable, runnable example program or MCVE,我就不可能很好地回答这个问题,但我可以提出建议:

  • 如果您在顶级窗口(如JFrame,JApplet或类似窗口)中绘图,请不要。
  • 您不应该调用与被覆盖的绘画方法不同的超级绘画方法。在这里,你要在一个绘画方法中调用super.paintComponent,这是一个非常危险的事情。
  • 您应该在JPanel的paintComponent方法中绘制,因为这会自动授予您双重缓冲。
  • 如上所述,应该在覆盖范围内调用getGraphics()
  • 您应该避免使用通过在Swing GUi组件上调用ID Name DE1 DN1 DE2 DN2 DE3 DN3 88637 Zack Fay -0.026841782 -0.071375637 0.160878583 -0.231788845 0.191811833 0.396593863 88687 Victory Greenfelder 0.219394372 -0.081932907 0.053054879 -0.048356016 88737 Lynnette Gorczany 0.043632299 0.118916157 0.005488698 -0.268612073 88787 Odelia Tremblay PhD 0.083147337 0.152277791 -0.039216388 0.469656787 -0.21725977 0.073797219 获得的Graphics对象,因为这会为您提供一个短暂的对象,这可能会使您的图像消失或更糟,抛出NullPointerException。

答案 1 :(得分:-2)

只需使用此重绘:

重绘(0,0,1,1);

而不是你的