我想带回一个之前提出过的问题:java draw line as the mouse is moved
“我想在我的应用程序中添加一个功能,允许用户通过在起始位置单击鼠标并在结束位置释放它来绘制直线。当鼠标移动时,线条应移动直到它为止最终发布;类似于使用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);
}
答案 0 :(得分:3)
这是适用于我的代码,但是在您绘制新代码后,上一行会被删除:
有两种常见的方法:
保持要绘制的对象的ArrayList。然后每次组件需要重新绘制自己时,paintComponent()方法重新绘制所有对象
绘制到BufferImage上,然后绘制BufferedImage。
查看Custom Painting Approaches以获取这两种方法的工作示例。