Прослушиватель событий для изменения цвета кнопки при нажатии

Как изменить прослушиватель фокуса только на выполняемое действие, чтобы при нажатии кнопки он запускал метод затухания?

class FaderTimer implements FocusListener, ActionListener {
    private ArrayList colors;
    private JButton component;
    private Timer timer;
    private int alpha;
    private int increment;

    FaderTimer(ArrayList colors, JButton component, int interval) {
        this.colors = colors;
        this.component = component;
        component.addFocusListener(this);
        timer = new Timer(interval, this);
    }

    public void focusGained(FocusEvent e) {
        alpha = 0;
        increment = 1;
        timer.start();
    }

    public void focusLost(FocusEvent e) {
        alpha = steps;
        increment = -1;
        timer.start();
    }

    public void actionPerformed(ActionEvent e) {
        alpha += increment;

        component.setBackground((Color) colors.get(alpha));

        if (alpha == steps || alpha == 0) {
            timer.stop();
        }
    }
}
    }

person Audio Alief    schedule 01.10.2017    source источник
comment
Вам понадобятся два ActionListener, один для кнопки и один для Timer   -  person MadProgrammer    schedule 01.10.2017
comment
Вы также должны принять во внимание, что исходный код исчезает И исчезает, поэтому вам нужно решить, какие действия следует предпринять (вы исчезаете или исчезаете)   -  person MadProgrammer    schedule 01.10.2017
comment
я хочу исчезать при нажатии кнопки, как это? @MadProgrammer   -  person Audio Alief    schedule 01.10.2017


Ответы (1)


Когда вы задаете вопрос, люди должны знать контекст вопроса. Похоже, вы скопировали код из ответа, например: Как медленно изменить цвет объекта с одного на другой?

Этот код был разработан для затемнения фона в событиях focusGained и focusLost.

Итак, ваше требование - сделать это одним нажатием кнопки. Таким образом, в основном вам нужно добавить ActionListener к кнопке, чтобы вызвать логику, найденную в событии focusGained(...).

Один из способов сделать это может быть:

//component.addFocusListener(this);
component.addActionListener( new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        alpha = 0;
        increment = 1;
        timer.start();
    }   
});
person camickr    schedule 01.10.2017
comment
да @camickr, я скопировал этот код из предоставленной вами ссылки, извините, что не включил ссылку на источник в свой вопрос, но спасибо за ваш ответ, я попробую .. - person Audio Alief; 02.10.2017
comment
если я хочу, чтобы оно появлялось, когда текстовое поле не пусто, и исчезало, когда текстовое поле пусто, как это сделать @camickr - person Audio Alief; 06.10.2017