Como alterar uma cor JButton no mouse pressionado?

Eu quero ter cores personalizadas de acordo com os eventos do mouse (mouse, sair, pressionar, etc). Então, para conseguir isso, eu escrevi o código abaixo. É bom para tudo, exceto no caso do evento pressionado pelo mouse, que não faz nada. Só funciona se eu sobrescrever a cor noUIManager como issoUIManager.put("Button.select", Color.red);. Problema com oUIManageré que vai mudar para todos os meus botões.

Alguém pode me dizer o que eu poderia estar fazendo errado ou qual é a melhor abordagem para realizar o que estou tentando fazer?

Meu Código:

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: Então, ao invés do ouvinte do mouse, eu estou usandoChangeListener eButtonModel como sugerido por mKorbel. Com este código ainda não estou observando nenhuma alteração no mouse pressionado no botão, exceto quando pressiono e arraso para fora do botão. Alguma ideia?

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

questionAnswers(7)

yourAnswerToTheQuestion