Я хочу иметь пользовательские цвета в соответствии с событиями мыши (ввод мыши, выход, нажатие и т.д.). Поэтому для этого я написал код ниже. Это нормально для всего, кроме случая с нажатой кнопкой мыши, которая ничего не делает.
Он работает только в том случае, если я переопределяю цвет в 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));
}
}
});