如何设置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 以更有意义的方式更改颜色。
我想创建 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 以更有意义的方式更改颜色。