2016-12-29 10 views
1

クリックするたびに色を変えるようにJButtonを作成したいが、2回目のクリック後に変わらない。 それは私の代わりにRandom()。nextInt(250)で動作するので変です。 何が問題なのでしょうか?クリックして色を徐々に変えるようにJButtonを設定する方法

ここでは、コードです:

import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Main { public static void main(String[] args) { JFrame jf = new JFrame(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel jp = new JPanel(); jp.setLayout(new BorderLayout(100, 100)); JButton l = new JButton("Hello"); l.setBackground(new Color(245, 12, 53)); jp.add(l, BorderLayout.EAST); jf.add(jp); jf.setSize(200, 200); jf.setLocationRelativeTo(null); jf.setVisible(true); l.addActionListener(new ActionListener() { Integer i = new Integer(0); Color c = new Color(150, 10, i); @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (i < 200) { i += 50; c = new Color(150, 10, i); l.setBackground(c); } else i = 0; } }); } }

答えて

3

私はあなたのコードをデバッグし、c変更の値、私はボタンをクリックするたびにいるのを見ましたが。最初の値は(r = 150、g = 10、b = 50)、次に(r = 150、g = 10、b = 100)に変わり、次に(r = 150、g = 10、b = 150)などに変わります。

これは実際に色が変化していることを意味します。違いが気付かないほど小さすぎることです。

なぜrandom.nextIntは機能しますか?

青色成分にランダムな値があります。値は非常に突然0から200にジャンプすることができます。色の差は非常に大きく、目に見えます。しかし、毎回50回ずつ徐々に変化していくと、初めて気付くだけです。

new Color(0, 0, i)でテストしてください。私はそれがより大きな違いを生むだろうと思う。それは黒から青に行くでしょう!

+0

ありがとう、実際に私は変更に気付かなかった、私はフラックスをインストールして不都合に私はブルーコンポーネントを選択しました – JayDP

+0

@JayDPあなたの質問に答えると思うなら、そのチェックマークをクリックして受け入れることを検討してください! – Sweeper

+0

@JayDP、 '本当に私は変更に気づいていませんでした.' - 作成されたColorオブジェクトを表示しましたか?これは基本的なデバッグです。 – camickr

0

私にとってうまく動作します。

コードは、おそらくのようなものである必要がありますが:

if (i < 200) 
    i += 50; 
else 
    i = 0; 

c = new Color(150, 10, i); 
l.setBackground(c); 

そうでない場合は、色を変更しませんワンクリックがあるでしょう。

HSL Colorを使用することをお勧めします。色の色相または色合いを変更することで、より意味のある方法で色を変更することができます。

関連する問題