繁体   English   中英

Java Swing JButton在hover开启和离开时缓慢改变颜色

[英]Java Swing JButton change color slowly when hover on & leave

我正在尝试对我的 JButton 进行特殊效果:当 hover 打开时逐渐改变其背景颜色,并在 hover 离开时逐渐变回。 我用了Java Timer,试了很多次。 看来我只能部分做 hover,到底发生了什么? 我应该如何解决它? 任何帮助将不胜感激。 谢谢。

b.addMouseListener(new java.awt.event.MouseAdapter() {
        Timer timer;
        public void mouseEntered(java.awt.event.MouseEvent evt) {
            timer = new Timer();
            TimerClass Tclass = new TimerClass(b,26,255,255,0,10);
            timer.scheduleAtFixedRate(Tclass, 0, 30);

        }

        public void mouseExited(java.awt.event.MouseEvent evt) {
            timer.cancel();
            timer = new Timer();
            TimerClass Tclass = new TimerClass(b,26,255,255,100,-10);
            timer.scheduleAtFixedRate(Tclass, 0, 30);
        }
    });
class TimerClass extends TimerTask {
JButton jbu;
int r,b,g, ic;
int p;
boolean gu;
TimerClass(JButton jb, int rr, int bb, int gg, int op, int ii) {
    jbu=jb;
    r=rr;b=bb;g=gg;
    ic=ii;
    p=op;
    if(op==0){gu=true;}else{gu=false;}
}
@Override
public void run() {
    jbu.setBackground(new Color(r,b,g,p));
    if((p+ic<100)&&(p+ic>0)){
        p+=ic;}else{cancel();}



}

}

import java.awt.Color;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;

public class TwoButton{
    JFrame Frame;
    JButton button1, button2;

    public TwoButton() {
        Frame = new JFrame("Nya");
        button1 = new JButton("Nya");
        button2 = new JButton("Nya");
        button1.setBounds(200,200,100,30);
        button2.setBounds(200,230,100,30);
        button1.setBackground(Color.white);
        button2.setBackground(Color.white);
        button1.setBorder(null);
        button2.setBorder(null);
        button1.setFocusable(false);
        button2.setFocusable(false);
        button1.addMouseListener(new MouseAdapt(button1));
        button2.addMouseListener(new MouseAdapt(button2));
        Frame.add(button1);
        Frame.add(button2);
        Frame.setSize(500,500);
        Frame.getContentPane().setBackground(Color.white);
        Frame.setLayout(null);
        Frame.setVisible(true);

    }
    public static void main(String[] args) {
        new TwoButton();
    }
}
class MouseAdapt extends java.awt.event.MouseAdapter {
    Timer timer;
    JButton b;
    MouseAdapt(JButton jbutton) {
        b=jbutton;
    }
    public void mouseEntered(java.awt.event.MouseEvent evt) {
        timer = new Timer();
        TimerClass Tclass = new TimerClass(b,255,255,255,-10);
        timer.scheduleAtFixedRate(Tclass, 0, 30);

    }

    public void mouseExited(java.awt.event.MouseEvent evt) {
        timer.cancel();
        Color currentColor = b.getBackground();
        timer = new Timer();
        TimerClass Tclass = new TimerClass(b, 255, 255, currentColor.getBlue(), 10);
        timer.scheduleAtFixedRate(Tclass, 0, 30);
    }
}
class TimerClass extends TimerTask {
    JButton jbu;
    int r,b,g,increment;
    TimerClass(JButton jb, int rr, int bb, int gg, int inc) {
        jbu=jb;
        r=rr;b=bb;g=gg;
        increment = inc;
    }
    @Override
    public void run() {
        jbu.setBackground(new Color(r,b,g));
        //* Color change
        if ((g+increment>=102)&&(g+increment<=255)){
            g+=increment;
        } else {
            cancel();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM