如何在按下鼠标时更改JButton颜色?
2022-09-02 23:23:10
我想根据鼠标事件(鼠标进入,退出,按下等)自定义颜色。因此,为了实现这一点,我编写了下面的代码。它适用于一切,除了鼠标按下事件的情况,它不执行任何操作。
只有当我覆盖像这样的颜色时,它才有效。的问题是它会为我的所有按钮更改。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());
}
});
编辑1:所以,我没有,而是按照mKorbel的建议使用。有了这个代码,我仍然没有观察到鼠标按下按钮的任何变化,除非我在按钮外按住并拖动。有什么想法吗?MouseListener
ChangeListener
ButtonModel
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));
}
}
});