情况是这样, 我写了一个画圆的类public class Circle extends JPanel{    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        Color c = g.getColor();
        g.setColor(Color.BLUE);
        g.fillOval(30, 30, 50, 50);
        g.setColor(c);
    }然后我想把他添加到我AppUI类的jpanel1之中public class AppUI extends javax.swing.JFrame {        /** Creates new form AppUI */
    public AppUI() {
        initComponents();//生成相关界面代码,其中包括jpanel1
        Circle c = new Circle();
        c.paintComponent(Graphics g);//这一行不停的报错,不知道什么原因,IDE显示"找不到符号,需要 ), 不是语句"
        jPanel1.add(c);       
    }
}
不知道是什么问题,希望有高手能帮我解答一下.

解决方案 »

  1.   

    记忆中,直接去掉报错的语句就可以了。
    这条语句是自己执行的,不需要显式调用,也不能显式调用,就像actionPerformed函数一样。
      

  2.   

    c.paintComponent(Graphics g);去掉
    首先调用一个函数时,应该传一个具体的参数,Graphics g是在声明参数
    其次paintComponent是protected类型的,不能显示的调用。但是他会在对象初始化时自动调用
      

  3.   

    虽然没有必要写,但是如果非要写,也不能写成声明的形式(参数型 参数名)
    c.paintComponent(Graphics g);
      

  4.   

    给jPanel1和Circle设个背景色,确认这两者确实已经被显示出来了
    然后确认一下30, 30, 50, 50这个位置确实在显示范围内
      

  5.   


    jPanel我设置了为白色, 显示的确实是白色. 圆的背景色我设置的是红色, 圆本身为蓝色, 但是仍然显示不出来, 改变坐标为(80,80)和(130,130)仍然没有显示.不知道是什么问题.我在怀疑paintComponent()方法真的调用了么?
      

  6.   

    应该是你没有给c设置大小,c.setSize(100,100);
      

  7.   

    圆的背景色我设置的是红色,显示出来了?
    坐标设在(0,0)确保Circle显示出来了,圆就显示出来另外
    Circle c = new Circle();
    后面加一句
    c.setOpaque(false);
      

  8.   

    jPanel1.add(c);???好像没有这个的吧   JPanel
      

  9.   


    对,就是没有setsize.
    最后我终于搞定了! 通过我的实验, swing 的画图其实是把cricle作为一个JPanel, 然后在JPanel上面画画, 然后将这个JPanel加到其他的JPanel里面!所以事实上并不是在jpanel1上面画出了一个圆, 而是在circle上面画了一个圆, 最后讲circle加到jpanel1里面! 所以必须设置c.setsize()
    另外, 在circle内部filloval方法里面设置位置只是圆相对于jpanel的
    要想控制圆在jpanel1里面的位置, 必须在appUI这个类里面设置.贴上我最终的代码.
     public AppUI() {
            
            initComponents();
            this.setLocationRelativeTo(null);
            Circle c = new Circle();
            c.setLocation(260,260);
            c.setSize(40, 40);       
            c.setBackground(Color.white);
            jPanel1.add(c);    }public class Circle extends JPanel{    public static final int circleWidth = 40;
        public static final int positionX = 0;
        public static final int positionY = 0;
        @Override
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            Color c = g.getColor();
            g.setColor(Color.BLUE);
            g.fillOval(positionX, positionY, circleWidth, circleWidth);
            g.setColor(c);    }