动画两个Point对象之间的线

在两个Point对象之间画一条线的最简单方法是什么,看起来像是我手工实时绘制那条线?

例如:

Point a = new Point(5,20); Point b = new Point(15,20); 

如何使用“移动”线连接这些点?

换句话说,我想让用户感受某种“动作”。 有一个简单的方法吗?

根据Chinmay Kanchi的回答,你需要创造一种动画的感觉。 如上所述,在Uhlen的评论中,你应该在使用EDT时使用Swing的Timer。 举例说明如何使用Timer。 让我们假设我们有一个面板,我们希望它在例如按钮点击时滑动打开,因此我们需要通过增加其大小来滑动打开它。 下面是一个示例,显示了如何使用Timer进行操作。

 this.extendingTimer = new Timer(0, new ActionListener() { public void actionPerformed(ActionEvent e) { //assume sliding is vertical int value = maximumHeight; //make sure the size will not be bigger then allowed maximum if(currentExtensionSize + extensionRate >= value) { currentExtensionSize = value; stopExtending(); } else currentExtensionSize += extensionRate; setSize(new Dimension(maximumWidth, currentExtensionSize)); } }); extendingTimer.setInitialDelay(0); extendingTimer.setDelay(100); extendingTimer.setRepeats(true); 

给定两点,您可以确定连接它们的线的方程。 线的方程式为y = mx + c ,其中m是斜率,c是y截距。

所以,考虑到你的两点(5,20)和(15,20),我们首先确定m。

 m = (y2-y1)/(x2-x1) = (20-20)/(15-5) = (0)/10 = 0 

将等式代入直线,得到y = 0x + cy = c 。 现在我们知道这一点,我们只需要知道y = c和5 <= x <= 15的点。 只需在绘制每个点之间使用Thread.sleep()调用,以正常方式绘制每个点(使用精确方法查看Thread.sleep() 。 在这种情况下,您只有11个点可以绘制,因此每100毫秒绘制1个点是有意义的。 有关Thread.sleep()详细信息,请参见此处 。

编辑:由于Thread.sleep()不能在EDT上工作,请查看javax.swing.Timer ,正如Uhlen建议的那样。

 int lineCount = 0; //global // timer calls the below xLocation = (*a)[a->size()-1] * timeSoFar / duration ; if(xLocation > (*a)[lineCount+1]){ lineCount++; } double m = ((*b)[lineCount+1] - (*b)[lineCount])/((*a)[lineCount+1]-(*a)[lineCount]); double yIntercept = (*b)[lineCount]-m*(*a)[lineCount]; yLocation = m * xLocation + yIntercept; xLocation = (yLocation - yIntercept) / m; 

这是用c ++和使用向量,但它是我们想要的理论。 这允许多条线而不仅仅是一条线。