JButton mousePressed的时候如何设置背景色

时间:2022-11-09 14:51:12
初学JAVA,在写JButton外观的时候,其它都没什么问题, 就是在mousePressed的时候背景色无法改变,一直是默认的颜色,这是为什么,要如何解决?

主要代码如下:


private void init() {
this.setFont(new Font(null,Font.PLAIN,10));
this.setMargin(new Insets(0,0,0,0));
this.setFocusPainted(false);
this.setBorder(border);
this.setBackground(Ex01.background);
this.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
display(0X1d7288,0Xd6eef4,0X9dd5e4);
}
//这个mousePressed的背景色无效,border倒是没问题
public void mousePressed(MouseEvent e) {
display(0X1b6a7f,0X95d2e2,0X2ca5c4);
}
public void mouseReleased(MouseEvent e) {
display(0X1d7288,0Xd6eef4,0X9dd5e4);
}
public void mouseExited(MouseEvent e) {
Ex01JButton.this.setBorder(border);
Ex01JButton.this.setBackground(Ex01.background);
}
});
}
private void display(int outsideColor,int insideColor,int backgroundColor) {
LineBorder outside=new LineBorder(new Color(outsideColor),1,true);
LineBorder inside=new LineBorder(new Color(insideColor),1,true);
CompoundBorder border=new CompoundBorder(outside,inside);
this.setBorder(border);
this.setBackground(new Color(backgroundColor));
}

6 个解决方案

#1


楼主,有个根本的原因
在BasicButtonUI类中
在button处于按下状态的时候
会以一种按下色彩进行填充
就把你的背景给挡住了
你可以这样试下效果
把鼠标在你的按钮上按下(保持鼠标按下将你的鼠标移出这个button)
当然你要先去掉你的mouseExited事件中的代码
这时你就能看出改变的效果了

#2


那具体有什么好的解决办法吗?

#3


引用 2 楼 bluell 的回复:
那具体有什么好的解决办法吗?

方法一:
重写BasicButtonUI中的在按下时的绘制那部分代码
这个方法要求比较高

方法二:
用JLabel代替JButton,平时设置凸起的边框
按下时用凹下的边框,一样可以有按钮的效果
按钮事件在mouseReleased中处理

#4


sunyiz 在图形界面很专长的呦
引用 3 楼 sunyiz 的回复:
引用 2 楼 bluell 的回复:
那具体有什么好的解决办法吗?

方法一:
重写BasicButtonUI中的在按下时的绘制那部分代码
这个方法要求比较高

方法二:
用JLabel代替JButton,平时设置凸起的边框
按下时用凹下的边框,一样可以有按钮的效果
按钮事件在mouseReleased中处理

#5


引用 4 楼 dyllove98 的回复:
sunyiz 在图形界面很专长的呦

呵呵,似乎我也总是能看到你

#6


LABEL很好用,解决~3Q

#1


楼主,有个根本的原因
在BasicButtonUI类中
在button处于按下状态的时候
会以一种按下色彩进行填充
就把你的背景给挡住了
你可以这样试下效果
把鼠标在你的按钮上按下(保持鼠标按下将你的鼠标移出这个button)
当然你要先去掉你的mouseExited事件中的代码
这时你就能看出改变的效果了

#2


那具体有什么好的解决办法吗?

#3


引用 2 楼 bluell 的回复:
那具体有什么好的解决办法吗?

方法一:
重写BasicButtonUI中的在按下时的绘制那部分代码
这个方法要求比较高

方法二:
用JLabel代替JButton,平时设置凸起的边框
按下时用凹下的边框,一样可以有按钮的效果
按钮事件在mouseReleased中处理

#4


sunyiz 在图形界面很专长的呦
引用 3 楼 sunyiz 的回复:
引用 2 楼 bluell 的回复:
那具体有什么好的解决办法吗?

方法一:
重写BasicButtonUI中的在按下时的绘制那部分代码
这个方法要求比较高

方法二:
用JLabel代替JButton,平时设置凸起的边框
按下时用凹下的边框,一样可以有按钮的效果
按钮事件在mouseReleased中处理

#5


引用 4 楼 dyllove98 的回复:
sunyiz 在图形界面很专长的呦

呵呵,似乎我也总是能看到你

#6


LABEL很好用,解决~3Q