2011-02-15 27 views
0

在 中以两种方式在两个Point对象之间绘制线条的最简单方法是什么?在两个Point对象之间创建动画

例如:

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

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

换句话说,我想让用户感觉某种“动作”。有没有简单的方法来做到这一点?

+1

从90年代中期开始,人们将Java拼写为JAVA的另一个时间扭曲 – 2011-02-15 22:26:30

回答

2

继Chinmay Kanchi的回答之后,你需要创造一种动画的感觉。正如上面在Uhlen的评论中提到的那样,在EDT上工作时应该使用Swing's 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); 
3

给定两点,您可以确定连接它们的线的方程式。线的方程形式为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的点。简单地以正常方式绘制每个点(在确切的方法中查看this),在绘制每个点之间调用Thread.sleep()。在这种情况下,你只需要画出11个点,所以每100毫秒绘制1点就有意义。有关Thread.sleep()的详细信息,请参阅here

编辑:由于Thread.sleep()无法在EDT上运行,请参阅javax.swing.Timer,正如Uhlen所建议的那样。

+3

线程#睡眠在EDT上不起作用。使用javax.swing.Timer是要走的路... – Uhlen 2011-02-15 22:39:47

+0

你能给我一个关于如何使用它的提示..?顺便说一下, – kstratis 2011-02-16 00:58:47

0
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++和使用的载体,但其我们想要的理论。这允许多行不只一行。

相关问题