public class BallPanel extends javax.swing.JPanel{
private final int INIT_X=75;
private final int INIT_Y=75;
private final int DIAMETER=60;
private SmartEllipse _ball;


public BallPanel(){
super();
_ball=new SmartEllipse(java.awt.Color.green);
_ball.setLocation(INIT_X,INIT_Y);
_ball.setSize(DIAMETER,DIAMETER);
this.setBackground(java.awt.Color.white);//我想把背景改成白色,但是不行
}
public void paintComponent(java.awt.Graphics aBrush){
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
aBrush;
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
}

解决方案 »

  1.   

    this.getContentPane().setBackground(java.awt.Color.white);你试试上面的代码另外,没法帮你调试 因为没有SmartEllipse类
      

  2.   

    this.setBackground(java.awt.Color.white);//我想把背景改成白色,但是不行
    放到paintComponent方法里 public void paintComponent(java.awt.Graphics aBrush){
            super.paintComponents(aBrush);
            java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
            aBrush;
            setBackground(java.awt.Color.white
            _ball.fill(betterBrush);
            _ball.draw((java.awt.Graphics2D) aBrush);
        }
      

  3.   

    this.setBackground(java.awt.Color.white);
    这样写是没有错的,但是panel是要有父组建的,即要在一个frame上才能显示一个panel,楼主试一下加一个frame,然后add这个panel,设置背景颜色那样写是正确的
      

  4.   

    没看到你extends的JPanel,我以为是JFrame呢。我把你代码改了一下,你看看,当然这是示意如何显示背景色public class BallPanel extends javax.swing.JFrame{//改成JFrame,为什么?看3楼
        private final int INIT_X=75;
        private final int INIT_Y=75;
        private final int DIAMETER=260;//改大点 60实在太小了
        //private SmartEllipse _ball;//我注释掉了
        
        
        public BallPanel(){
            super();
            //_ball=new SmartEllipse(java.awt.Color.green);//同上 注释掉了
            this.setLocation(INIT_X,INIT_Y);
            this.setSize(DIAMETER,DIAMETER);
            this.getContentPane().setBackground(java.awt.Color.red);//为了直白,改成红色
            this.setVisible(true);//显示改组件
        }
        
        
        public static void main(String args[]){
         new BallPanel();
        }
    }输出:
      

  5.   

    jpanel要有容器才可以显示的。不象JFrame之类的可以独立显示。。
      

  6.   

    看来我该把全部程序贴出来,我的意图是先有一个JFrame类了,在里面放一个JPanel的类型,然后在JPanel上面显示一个圆,然后可以改JPanel的背景颜色,代码如下:public class BallApp extends javax.swing.JFrame { /**
     * @param args
     */
    private BallPanel p;
    public BallApp(String title){
    super(title);

    this.setSize(600,450);
    this.setDefaultCloseOperation
    (javax.swing.JFrame.EXIT_ON_CLOSE);
    p=new BallPanel();
    this.add(p);

    this.setVisible(true);
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    BallApp app=
    new BallApp("Jam's first window");
    //pane1.
    }
    }
    public class BallPanel extends javax.swing.JPanel{
    private final int INIT_X=75;
    private final int INIT_Y=75;
    private final int DIAMETER=250;
    private SmartEllipse _ball;


    public BallPanel(){
    super();
    _ball=new SmartEllipse(java.awt.Color.green);
    _ball.setLocation(INIT_X,INIT_Y);
    _ball.setSize(DIAMETER,DIAMETER);
    }
    public void paintComponent(java.awt.Graphics aBrush){
    super.paintComponents(aBrush);
    java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
    aBrush;
    _ball.fill(betterBrush);
    _ball.draw((java.awt.Graphics2D) aBrush);
    }
    }
    public class SmartEllipse extends java.awt.geom.Ellipse2D.Double{
    private java.awt.Color _borderColor,_fillColor;
    private int _rotation;
    private final int STROKE_WIDTH=2;
    public SmartEllipse(java.awt.Color aColor){
    super();
    _borderColor=aColor;
    _fillColor=aColor;
    _rotation=0;
    }
    public void setBorderColor(java.awt.Color aColor){
    _borderColor=aColor;
    }
    public void setFillColor(java.awt.Color aColor){
    _fillColor=aColor;
    }
    public void setColor(java.awt.Color aColor){
    _fillColor=aColor;
    _borderColor=aColor;
    }
    public void setRotation(int aRotation){
    _rotation=aRotation;
    }
    public void setLocation(double x,double y){
    this.setFrame(x,y,this.getWidth(),this.getHeight());
    }
    public void setSize(int aWidth,int aHeight){
    this.setFrame(this.getX(),this.getY(),aWidth,aHeight);
    }
    public void move(int aChangeInX,int aChangeInY){
    this.setFrame((int)this.getX()+aChangeInX,
    (int)this.getY()+aChangeInY,
    this.getWidth(),this.getHeight());
    }
    public void fill(java.awt.Graphics2D aBetterBrush){
    java.awt.Color saveColor=aBetterBrush.getColor();
    aBetterBrush.setColor(_fillColor);
    aBetterBrush.fill(this);
    aBetterBrush.setColor(saveColor);
    }
    public void draw(java.awt.Graphics2D aBrush){
    java.awt.Color savedColor=aBrush.getColor();
    aBrush.setColor(_borderColor);
    java.awt.Stroke savedStroke=aBrush.getStroke();
    aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
    aBrush.draw(this);
    aBrush.setStroke(savedStroke);
    aBrush.setColor(savedColor);
    }
    }
      

  7.   

    我是先加了JFrame类的了~~~~~~~请你们帮帮忙~~~
      

  8.   

    java.awt.Color.white,white是不是要大写?
      

  9.   

    getContentPane().setVisible(false);
     this.setBackground(Color.WHITE);这样写也是可以的  
      

  10.   


    public class BallApp extends javax.swing.JFrame {    /**
         * @param args
         */
        private BallComponent c;//换成c
        public BallApp(String title){
            super(title);
            
            this.setSize(600,450);
            this.setDefaultCloseOperation
            (javax.swing.JFrame.EXIT_ON_CLOSE);
    //        p=new BallPanel();
    //        this.add(p);
            c=new BallComponent();//换成c
            this.add(c);
            this.getContentPane().setBackground(java.awt.Color.RED);//背景色改成红
            
            this.setVisible(true);
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BallApp app=
                new BallApp("Jam's first window");
            //pane1.
        }
    }/**
     * 照搬一个JComponent
     * @author Administrator
     *
     */
    class BallComponent extends javax.swing.JComponent{
        private final int INIT_X=75;
        private final int INIT_Y=75;
        private final int DIAMETER=250;
        private SmartEllipse _ball;
        
        
        public BallComponent(){
            super();
            _ball=new SmartEllipse(java.awt.Color.green);
            _ball.setLocation(INIT_X,INIT_Y);
            _ball.setSize(DIAMETER,DIAMETER);
        }
        public void paintComponent(java.awt.Graphics aBrush){
            super.paintComponents(aBrush);
            java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
            aBrush;
            _ball.fill(betterBrush);
            _ball.draw((java.awt.Graphics2D) aBrush);
        }
    }class SmartEllipse extends java.awt.geom.Ellipse2D.Double{
    //public class SmartEllipse extends java.awt.geom.Ellipse2D.Double{ //去掉了public
        private java.awt.Color _borderColor,_fillColor;
        private int _rotation;
        private final int STROKE_WIDTH=2;
        public SmartEllipse(java.awt.Color aColor){
            super();
            _borderColor=aColor;
            _fillColor=aColor;
            _rotation=0;
        }
        public void setBorderColor(java.awt.Color aColor){
            _borderColor=aColor;
        }
        public void setFillColor(java.awt.Color aColor){
            _fillColor=aColor;
        }
        public void setColor(java.awt.Color aColor){
            _fillColor=aColor;
            _borderColor=aColor;
        }
        public void setRotation(int aRotation){
            _rotation=aRotation;
        }
        public void setLocation(double x,double y){
            this.setFrame(x,y,this.getWidth(),this.getHeight());
        }
        public void setSize(int aWidth,int aHeight){
            this.setFrame(this.getX(),this.getY(),aWidth,aHeight);
        }
        public void move(int aChangeInX,int aChangeInY){
            this.setFrame((int)this.getX()+aChangeInX,
                    (int)this.getY()+aChangeInY,
                this.getWidth(),this.getHeight());
        }
        public void fill(java.awt.Graphics2D aBetterBrush){
            java.awt.Color saveColor=aBetterBrush.getColor();
            aBetterBrush.setColor(_fillColor);
            aBetterBrush.fill(this);
            aBetterBrush.setColor(saveColor);
        }
        public void draw(java.awt.Graphics2D aBrush){
            java.awt.Color savedColor=aBrush.getColor();
            aBrush.setColor(_borderColor);
            java.awt.Stroke savedStroke=aBrush.getStroke();
            aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
            aBrush.draw(this);
            aBrush.setStroke(savedStroke);
            aBrush.setColor(savedColor);
        }
    }我也是刚开始学;
    1.5.0_17 Eclipse 调试结果:
      

  11.   

    是的,把Jpanel放在Jframe上,在用你那句就ok了。
      

  12.   

    JFrame f = new JFrame();
    JPanel p = new JPanel();
    f.add(p);
    p.setBackground(Color.RED);
    this.setVisible(true);
      

  13.   

    jbuild 一下 就可以了  咱刚学  不要怪我  嘎嘎
      

  14.   


    public class BallApp extends javax.swing.JFrame {
    /** * @param args */
    private BallPanel p; public BallApp(String title) {
    super(title);
    this.setSize(600, 450);                this.setBackground(java.awt.Color.red); this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    p = new BallPanel();
    this.add(p);
    this.setVisible(true);
    } public static void main(String[] args) { // TODO Auto-generated method stub
    BallApp app = new BallApp("Jam's first window"); // pane1.
    }
    }public class BallPanel extends javax.swing.JPanel {
    private final int INIT_X = 75;
    private final int INIT_Y = 75;
    private final int DIAMETER = 250;
    private SmartEllipse _ball; public BallPanel() {
    super();
    _ball = new SmartEllipse(java.awt.Color.green);
    _ball.setLocation(INIT_X, INIT_Y);
    _ball.setSize(DIAMETER, DIAMETER);
    } public void paintComponent(java.awt.Graphics aBrush) {
    super.paintComponents(aBrush);
    java.awt.Graphics2D betterBrush = (java.awt.Graphics2D) aBrush;
    _ball.fill(betterBrush);
    _ball.draw((java.awt.Graphics2D) aBrush);
    }
    }public class SmartEllipse extends java.awt.geom.Ellipse2D.Double {
    private java.awt.Color _borderColor, _fillColor;
    private int _rotation;
    private final int STROKE_WIDTH = 2; public SmartEllipse(java.awt.Color aColor) {
    super();
    _borderColor = aColor;
    _fillColor = aColor;
    _rotation = 0;
    } public void setBorderColor(java.awt.Color aColor) {
    _borderColor = aColor;
    } public void setFillColor(java.awt.Color aColor) {
    _fillColor = aColor;
    } public void setColor(java.awt.Color aColor) {
    _fillColor = aColor;
    _borderColor = aColor;
    } public void setRotation(int aRotation) {
    _rotation = aRotation;
    } public void setLocation(double x, double y) {
    this.setFrame(x, y, this.getWidth(), this.getHeight());
    } public void setSize(int aWidth, int aHeight) {
    this.setFrame(this.getX(), this.getY(), aWidth, aHeight);
    } public void move(int aChangeInX, int aChangeInY) {
    this.setFrame((int) this.getX() + aChangeInX, (int) this.getY()
    + aChangeInY, this.getWidth(), this.getHeight());
    } public void fill(java.awt.Graphics2D aBetterBrush) {
    java.awt.Color saveColor = aBetterBrush.getColor();
    aBetterBrush.setColor(_fillColor);
    aBetterBrush.fill(this);
    aBetterBrush.setColor(saveColor);
    } public void draw(java.awt.Graphics2D aBrush) {
    java.awt.Color savedColor = aBrush.getColor();
    aBrush.setColor(_borderColor);
    java.awt.Stroke savedStroke = aBrush.getStroke();
    aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
    aBrush.draw(this);
    aBrush.setStroke(savedStroke);
    aBrush.setColor(savedColor);
    }
    }