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