我有一个设计项目,我应该用我的鼠标在Java中绘制之字形。首先,我使用MouseListener在mouseclick方法中,我收集了用户点击的所有点:
public void mouseClicked(MouseEvent e){
if(isAbleToDraw){
corners[points]=e.getPoint();
points++;
repaint();
}
}
这里我使用布尔值"isAbleToDraw"来检查用户是否点击了"绘制"或"停止绘制"按钮。然后,我像这样画出之字形:
super.paintComponent(graph);
Graphics2D g = (Graphics2D) graph;
g.drawLine(corners[i].x, corners[i].y, corners[i+1].x, corners[i+1].y);
最后的问题是,当我在画完一个之字形后点击"停止绘制"按钮,然后再次点击"绘制"按钮后,它一直从它离开的最后一个点开始绘制线条。换句话说,我不能画两个不同的独立之字形。
你知道如何解决这个问题吗?
如果您希望用户能够绘制多个之字形并在屏幕上同时看到它们,那么您可以使用点数组的Collection
。每次用户单击"draw"按钮时,您都会向集合中添加一个新数组,并使该新数组成为活动数组。在您的mouseClicked
中,您可以将用户单击的点添加到活动点数组中,当您绘制组件时,而不仅仅是绘制一个锯齿形,而是遍历数组集合并绘制它们。
有家庭作业的味道
当用户停止绘制时,没有清除数组。当他们单击新图形的第一个点时,旧图形的最后一个点仍然位于数组的末尾,因此您的paint函数忠实地在它们之间绘制一条线。如果你在停止绘制时清除数组,它应该按照你想要的方式运行。