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

解决方案 »

  1.   

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

  2.   

    方法一:
    重写BasicButtonUI中的在按下时的绘制那部分代码
    这个方法要求比较高方法二:
    用JLabel代替JButton,平时设置凸起的边框
    按下时用凹下的边框,一样可以有按钮的效果
    按钮事件在mouseReleased中处理
      

  3.   

    sunyiz 在图形界面很专长的呦