Java Swing通过鼠标单击和拖动绘制线条

我想带回一个之前被问过的问题: 鼠标移动时的java绘制线

“我想在我的应用程序中添加一个function,允许用户通过在起始位置单击鼠标并在结束位置释放它来绘制直线。线条应在鼠标移动时移动,直到最终释放;类似于使用Microsoft Paint应用程序绘制线条的方式。

如何实现这一点,以便线条在移动时重新绘制,而不重新绘制可能已在该矩形区域中绘制的其他内容?“

问题是:如何在旧线条的情况下绘制多条线?

这是适用于我的代码,但是一旦绘制一个新代码,前一行就会被删除:

public static void main(String args[]) throws Exception { JFrame f = new JFrame("Draw a Red Line"); f.setSize(300, 300); f.setLocation(300, 300); f.setResizable(false); JPanel p = new JPanel() { Point pointStart = null; Point pointEnd = null; { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { pointStart = e.getPoint(); } public void mouseReleased(MouseEvent e) { pointStart = null; } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { pointEnd = e.getPoint(); } public void mouseDragged(MouseEvent e) { pointEnd = e.getPoint(); repaint(); } }); } public void paint(Graphics g) { super.paint(g); if (pointStart != null) { g.setColor(Color.RED); g.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y); } } }; f.add(p); f.setVisible(true); } 

这是适用于我的代码,但是一旦绘制一个新代码,前一行就会被删除:

有两种常见的方法:

  1. 保持要绘制的对象的ArrayList。 然后每次组件需要重绘自身时,paintComponent()方法重新绘制所有对象

  2. 绘制到BufferImage上,然后绘制BufferedImage。

查看自定义绘画方法 ,了解这两种方法的工作示例。