【发布时间】:2019-11-27 23:28:32
【问题描述】:
我有一个简单的绘画程序:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class CanvasPanel extends JFrame implements MouseMotionListener
{
private int x1, y1, x2, y2;
public CanvasPanel()
{
addMouseMotionListener(this);
setBounds(50,50,400,250);
setVisible(true);
}
public static void main(String[] argv)
{
new CanvasPanel();
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawLine(x1, y1, x2, y2);
}
public void mouseDragged(MouseEvent mouseEvent)
{
mouseEvent.consume();
int x = mouseEvent.getX();
int y = mouseEvent.getY();
if ( x1 == 0 )
{
x1 = x;
}
if ( y1 == 0 )
{
y1 = y;
}
x2 = x;
y2 = y;
repaint();
x1 = x2;
y1 = y2;
}
public void mouseMoved(MouseEvent me)
{
}
}
如果你运行它,你会发现用鼠标绘画时会有一个滞后,你画得越快,画就会分解成点。我该如何解决?我在想如果重绘速度超级快,那么点应该形成线条和曲线。
【问题讨论】:
-
首先,不要在像
JFrame这样的顶级容器上覆盖paint,而是使用Panel并覆盖它的paintComponent方法。理解绘画被认为是破坏性的,这意味着每次调用绘画时都希望您从头开始重新绘制组件状态,如果您不这样做会发生不好的事情