2012-05-11 22 views
1

コンポーネントは徐々に色が変化しています。私は色がJavaコントロールの色は徐々に変化します

new Color(0,0,0) 

new Color(255,0,0) 

のために変更することにしたいタイマーと異なる変形を試してみましたが、動けなくなります。そして、タイマーでこれを行うのは正しい方法ですか?

ありがとうございます!これらの線に沿って

+1

:-)あなたの探求のための代替HADNとしてJLayerを使用することを検討してください[JLayer](http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html)について聞いたことがありませんか? :-) –

+0

@nIcEcOw OPはあなたの提案(答えに関する彼のコメントから読んだ)と一緒に行く予定であるので、答えとしてそれを投稿するのはいいです:-) – COD3BOY

+0

@Sanjay:一言を書いていますか?私はそれを答えとして与えることができました。@@ PerryMonschauのように、彼の答えはいくつかの努力をしていましたが、1つの答えは私の意識が私を許さないことです。私は混乱しています:(しかし、あまりにも一例を挙げることができる人は、答えとしてこれを投稿することができます。 –

答えて

4

4

何か:

Color before = new Color(255,0,0); 
Color after = new Color(0,0,0); 
Color current = before; 
int maxtime = 1000; 
int step = 0; 

public void step() 
{ 
    if(step == maxtime) 
     return; 
    step++; 
    double percentComplete = step/maxtime; 
    double percentGone = 1-percentComplete; 
    int red = (int)(before.getRed()*percentGone+after.getRed()*percentComplete); 
    int green = (int)(before.getGreen()*percentGone+after.getGreen()*percentComplete); 
    int blue = (int)(before.getBlue()*percentGone+after.getBlue()*percentComplete); 
    int alpha = (int)(before.getAlpha()*percentGone+after.getAlpha()*percentComplete); 
    current = new Color(red, green, blue, alpha); 
    //set component's color to current 
} 

注意、あなたは赤、緑、青が255を超えていないことを確認するためにいくつかのチェックを行う必要があるかもしれないが、私はまだわかりません。

(この関数はその色あなたが変更しているコンポーネントに属している必要があり、あなたは各タイマティックでこれを呼び出す必要があります)

+0

あなたのご意見ありがとうございます。しかし、私はJlayerを使用するつもりだと@nIcE cOwが提案しました。 –

+0

:D私はそれについても知らなかった。 –

+0

このような計算は、[ここ](http://stackoverflow.com/a/10542850/230513)に示されているHSBカラーモデルでは簡単です。 – trashgod