如何设置JButton点击时渐变颜色

How to set JButton to change color gradually when clicked

我想创建 JButton 以在每次单击时更改颜色,但在第二次单击后它不会更改。 这很奇怪,因为使用 Random().nextInt(250) 而不是 i 它可以工作。 可能是什么问题?

代码如下:

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; } }); } }

我调试了您的代码,发现 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)测试一下。我认为这会产生更大的不同。它会从黑色变成蓝色!

适合我。

虽然代码可能应该是这样的:

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

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

否则一按不换色

您可能需要考虑使用 HSL Color 这将允许您通过更改颜色的色调或颜色的 shade/tone 以更有意义的方式更改颜色。