2012-05-22 68 views
1

我需要一個用Java編寫的顏色漸變示例。 我的要求是我有兩個矩形。一個充滿了紅色,另一個充滿了白色。當我點擊任何按鈕時,我想讓那個紅色開始褪色並移動綠色。一旦達到綠色位置,則另一個矩形自動從黃色藍色開始。有人能幫我解決嗎?如果有任何使用Javaswing或SWT編寫的例子會很好。謝謝。褪色樣本

+0

我曾嘗試一個褪色不satisy我的要求。它通過使用alpha將紅色減少爲白色。 – user414967

回答

3

結帳Trident動畫庫。它允許您輕鬆地在班級中插入屬性。另請查看來自Kirill Grouchnikov(Trident的作者)的原創教程these

編輯:動畫例如W/O三叉戟

下面的示例是基於AnimatedGraphics例如在Filthy Rich Clients

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class AnimatedGraphics extends JComponent implements ActionListener { 

    Color startColor = Color.RED; // where we start 
    Color endColor = Color.GREEN;   // where we end 
    Color currentColor = startColor; 
    int animationDuration = 2000; // each animation will take 2 seconds 
    long animStartTime;   // start time for each animation 

    public AnimatedGraphics() { 
     Timer timer = new Timer(30, this); 
     // initial delay while window gets set up 
     timer.setInitialDelay(1000); 
     animStartTime = 1000 + System.nanoTime()/1000000; 
     timer.start(); 
    } 

    public void paintComponent(Graphics g) { 
     g.setColor(getBackground()); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     g.setColor(currentColor); 
     g.fillOval(0, 0, getWidth(), getHeight()); 
    } 

    public void actionPerformed(ActionEvent ae) { 
     // calculate elapsed fraction of animation 
     long currentTime = System.nanoTime()/1000000; 
     long totalTime = currentTime - animStartTime; 
     if (totalTime > animationDuration) { 
      animStartTime = currentTime; 
     } 
     float fraction = (float)totalTime/animationDuration; 
     fraction = Math.min(1.0f, fraction); 
     // interpolate between start and end colors with current fraction 
     int red = (int)(fraction * endColor.getRed() + 
       (1 - fraction) * startColor.getRed()); 
     int green = (int)(fraction * endColor.getGreen() + 
       (1 - fraction) * startColor.getGreen()); 
     int blue = (int)(fraction * endColor.getBlue() + 
       (1 - fraction) * startColor.getBlue()); 
     // set our new color appropriately 
     currentColor = new Color(red, green, blue); 
     // force a repaint to display our oval with its new color 
     repaint(); 
    } 

    private static void createAndShowGUI() {  
     JFrame f = new JFrame("Animated Graphics"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(200, 200); 
     f.add(new AnimatedGraphics()); 
     f.setVisible(true); 
    } 

    public static void main(String args[]) { 
     Runnable doCreateAndShowGUI = new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }; 
     SwingUtilities.invokeLater(doCreateAndShowGUI); 
    } 
} 
+0

好的。謝謝。但我不知道我們是否可以將這個庫添加到我們的項目中。 Anywyas謝謝。 – user414967

+0

@ user414967我包含了一個動畫顏色轉換不帶三叉戟的示例。 – tenorsax

+0

非常感謝爵士!!!非常有幫助! – user414967