Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置JButton以在单击时逐渐更改颜色_Java_Swing_Colors_Jbutton_Actionlistener - Fatal编程技术网

Java 如何设置JButton以在单击时逐渐更改颜色

Java 如何设置JButton以在单击时逐渐更改颜色,java,swing,colors,jbutton,actionlistener,Java,Swing,Colors,Jbutton,Actionlistener,我想创建JButton,以便在每次单击时更改颜色,但在第二次单击后它不会更改。 这很奇怪,因为使用Random().nextInt(250)而不是i可以工作。 有什么问题吗 代码如下: 导入java.awt.BorderLayout; 导入java.awt.Color; 导入java.awt.event.ActionEvent; 导入java.awt.event.ActionListener; 导入javax.swing.JButton; 导入javax.swing.JFrame; 导入jav

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

代码如下:

导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共班机{
公共静态void main(字符串[]args){
JFrame jf=新JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE);
JPanel jp=新的JPanel();
jp.setLayout(newborderlayout(100100));;
JButton l=新JButton(“你好”);
l、 挫折背景(新颜色(245,12,53));
jp.add(l,BorderLayout.EAST);;
jf.add(jp),;
jf.设置大小(200200);
jf.setLocationRelativeTo(空);
jf.setVisible(真);
l、 addActionListener(新ActionListener(){
整数i=新整数(0);
颜色c=新颜色(150,10,i);
@凌驾
已执行的公共无效操作(操作事件e){
//TODO自动生成的方法存根
如果(i<200){
i+=50;
c=新颜色(150,10,i);
l、 退步地(c);
}否则
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的逐渐变化,你只会第一次注意到它

只需使用
新颜色(0,0,i)
进行测试即可。我认为这将带来更大的不同。它将从黑色变为蓝色

对我来说很好

尽管代码可能应该类似于:

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

c = new Color(150, 10, i);
l.setBackground(c);
if(i<200)
i+=50;
其他的
i=0;
c=新颜色(150,10,i);
l、 退步地(c);
否则,单击一次不会改变颜色


你可以考虑使用这个方法,通过改变颜色或色调或色调来改变颜色。

谢谢,这很有帮助,确实我没有注意到这个变化,我安装了FLUX,不幸的是我选择了蓝色。component@JayDP如果你认为我的答案回答了你的问题,请考虑通过点击复选来接受它!JayDP,
事实上,我没有注意到更改
-您是否显示了创建的颜色对象?这是基本调试。我做了,但没有看到颜色变化,我的显示器没有正确显示
if (i < 200) 
    i += 50;
else
    i = 0;

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