2016-12-29 74 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这将允许您通过更改颜色的色调或颜色的阴影/色调以更有意义的方式更改颜色。