刚学Java,用swing写了个自定义控件,怎么也改变不了自定义控件的背景色,setBackground方法用在哪里都不行,在调用界面中改变new出来的控件属性setBackground也没有反应了,点解啊?

解决方案 »

  1.   

    如果你是 extends JComponent 的话,JComponent 默认的 isOpaque() 是 false需要你在 constructor 里加一句 this.setOpaque(true);另外,如果你重写了 paintComponent(Graphics) 方法的话,记得在开头加上 super.paintComponent(g);如下:
    import java.awt.Graphics;
    import javax.swing.JComponent;
    /**
     *
     * @date   07/11/2012
     */
    public class MyComponent extends JComponent {
      
      public MyComponent() {
        
        // set default layout manager
        
        this.setOpaque(true);
      }
      
      @Override
      public void paintComponent(Graphics g) {
        
        super.paintComponent(g);
        
        // customized component painting
      }
    }
    这样,你的 setBackground() 就能正常工作了。
      

  2.   

    另外常见的控件,JLable 默认的 isOpaque() 是 falseJPanel 默认的 isOpaque() 是 true你可以自己调用 isOpaque() 查看其他控件的默认的 opaque 属性