Как изменить цвет JButton при нажатии мыши?

Я хочу иметь пользовательские цвета в соответствии с событиями мыши (ввод мыши, выход, нажатие и т. Д.). Поэтому, чтобы достичь этого, я написал код ниже. Это хорошо для всего, кроме случая нажатия кнопки мыши, который ничего не делает. Это работает только если я переопределить цвет вUIManager нравитсяUIManager.put("Button.select", Color.red);, Проблема сUIManager, что это изменится для всех моих кнопок.

Может кто-нибудь сказать мне, что я могу делать неправильно или как лучше всего выполнить то, что я пытаюсь сделать?

Мой код:

final JButton btnSave = new JButton("Save");

btnSave.setForeground(new Color(0, 135, 200).brighter());
btnSave.setHorizontalTextPosition(SwingConstants.CENTER);
btnSave.setBorder(null);
btnSave.setBackground(new Color(3, 59, 90));

btnSave.addMouseListener(new MouseListener() {
    @Override
    public void mouseReleased(MouseEvent e) {
        btnSave.setBackground(new Color(3, 59, 90));
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // Not working :(
        btnSave.setBackground(Color.pink);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        btnSave.setBackground(new Color(3, 59, 90));
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        btnSave.setBackground(new Color(3, 59, 90).brighter());
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        btnSave.setBackground(new Color(3, 59, 90).brighter());
    }
});

Edit1: Итак, вместо мыши слушателя, я используюChangeListener а такжеButtonModel как предложено mKorbel. С этим кодом я все еще не наблюдаю никаких изменений при нажатии кнопки мыши, кроме случаев, когда я нажимаю и перетаскиваю за пределы кнопки. есть идеи?

btnSave.getModel().addChangeListener(new ChangeListener() {

    @Override
    public void stateChanged(ChangeEvent e) {
        ButtonModel model = (ButtonModel) e.getSource();

        if (model.isRollover()) {
            btnSave.setBackground(new Color(3, 59, 90).brighter());
        } else if (model.isPressed()) {
            btnSave.setBackground(Color.BLACK);
        } else {
            btnSave.setBackground(new Color(3, 59, 90));
        }
    }
});

Ответы на вопрос(7)

Ваш ответ на вопрос