[英]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.