2011-02-15 40 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++和使用的載體,但其我們想要的理論。這允許多行不只一行。