【问题标题】:How to set JButton to change color gradually when clicked如何设置JButton在点击时逐渐改变颜色
【发布时间】:2017-05-13 07:18:45
【问题描述】:

我想创建 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; } }); } }

【问题讨论】:

    标签: java swing colors jbutton actionlistener


    【解决方案1】:

    我调试了您的代码,发现每次单击按钮时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) 进行测试即可。我认为这将产生更大的不同。它会从黑色变成蓝色!

    【讨论】:

    • 谢谢,这很有帮助,确实我没有注意到变化,我安装了助焊剂,不幸的是我选择了蓝色组件
    • @JayDP 如果您认为我的回答回答了您的问题,请考虑通过单击该复选标记接受它!
    • @JayDP, indeed i didn't notice the change - 你是否显示了创建的颜色对象?这是基本调试。
    • 我看到了,但没有看到颜色变化,我的显示器显示不正确
    【解决方案2】:

    对我来说很好。

    虽然代码应该是这样的:

    if (i < 200) 
        i += 50;
    else
        i = 0;
    
    c = new Color(150, 10, i);
    l.setBackground(c);
    

    否则会一键不变色。

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

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多