package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; class DrawPanel extends JFrame implements MouseMotionListener { private JPanel jpl=new JPanel(); private int x, y; private Graphics2D g2d; private boolean isDrawing = false; public DrawPanel() { jpl.setSize(400,400); this.add(jpl); this.setSize(400,400); this.setLayout(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); addMouseMotionListener(this); } public void paint(Graphics g) { super.paint(g); if (g2d == null) { g2d = (Graphics2D) g; g2d.setStroke(new BasicStroke(2)); } } public void mouseDragged(MouseEvent e) { if (!isDrawing) { x = e.getX(); y = e.getY(); isDrawing = true; } else { int x2 = e.getX(); int y2 = e.getY(); g2d.drawLine(x, y, x2, y2); x = x2; y = y2; } } public void mouseMoved(MouseEvent e) { isDrawing = false; } public static void main(String[] args) { DrawPanel panel = new DrawPanel(); } }这段代码为什么绘制不出曲线
时间: 2024-02-14 16:16:10 浏览: 27
这段代码存在一个问题,在`paint`方法中没有调用`super.paint(g)`方法。这个方法的作用是擦除之前的绘制内容,如果不调用这个方法,之前的内容就会一直存在,导致新绘制的曲线看不到。因此,应该在`paint`方法的第一行添加`super.paint(g)`。修改后的代码如下:
```java
public void paint(Graphics g) {
super.paint(g);
if (g2d == null) {
g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(2));
}
}
```