Java Swing JButton медленно меняет цвет при наведении и уходе - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь сделать специальный эффект на моем JButton: постепенно меняйте цвет фона при наведении курсора и постепенно меняйте его, когда уходите. Я использовал Java Таймер и пробовал много раз. Кажется, я могу делать парение только частично, что именно произошло? Как мне это исправить? Любая помощь будет оценена. Спасибо.

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();}



}

}

1 Ответ

0 голосов
/ 27 апреля 2020
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,increament;
    TimerClass(JButton jb, int rr, int bb, int gg, int inc) {
        jbu=jb;
        r=rr;b=bb;g=gg;
        increament = inc;
    }
    @Override
    public void run() {
        jbu.setBackground(new Color(r,b,g));
        //* Color change
        if ((g+increament>=102)&&(g+increament<=255)){
            g+=increament;
        } else {
            cancel();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...