2016-12-29 104 views
1

我想創建JButton以在每次點擊時改變顏色,但在第二次點擊後它不會改變。 這是奇怪的,因爲隨機()。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這將允許您通過更改顏色的色調或顏色的陰影/色調以更有意義的方式更改顏色。