我希望可以根据鼠标事件(如鼠标进入、退出、按下等)获得自定义颜色。因此,我编写了以下代码来实现这一点。除了鼠标按下事件无法起作用外,其他方面都很好。
只有在使用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建议的ChangeListener
和ButtonModel
代替了MouseListener
。 使用这段代码时,我仍然没有观察到在按钮上按下鼠标时的任何变化,除非我按下并拖到按钮外。 有什么想法吗?
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));
}
}
});
JButton
上添加鼠标监听器? - Branislav Lazic