源码如下,我试了下在class ArcsPanel下申明的几个变量如果放到public void paintComponent(Graphics g)方法体里面就能显示,但是放在这个方法体外面就不给我显示图形..是为什么为么什么 为什么呢!
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawArcs extends JFrame{
DrawArcs(){
getContentPane().add(new ArcsPanel());
setTitle("Draw Arcs");
this.setSize(250,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
    public static void main(String[] args){
     new DrawArcs();
    }
}
class ArcsPanel extends JPanel{
    
int xcenter=getHeight()/2;
        int ycenter=getWidth()/2;
        int r=(int)(Math.min(getHeight(), getWidth())*0.4);
int x=xcenter-r;
        int y=ycenter-r;
public void paintComponent(Graphics g){
    super.paintComponent(g);
 g.setColor(Color.cyan);
 g.drawArc(x, y, 2*r, 2*r, 0, 60);
 g.fillArc(x, y, 2*r,2*r, 0, 60);
 g.fillArc(x, y, 2*r, 2*r, 90, 60);
 g.fillArc(x, y, 2*r, 2*r, 180,60);
 g.fillArc(x, y, 2*r, 2*r, 270, 60);
 }
 

}

解决方案 »

  1.   

    我这段就能运行,原因是楼主的xyr都是0DrawArcs(){ 
    getContentPane().add(new ArcsPanel()); 
    setTitle("Draw Arcs"); 
    this.setSize(250,300); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 

        public static void main(String[] args){ 
        new DrawArcs(); 
        } 

    class ArcsPanel extends JPanel{ 
        
    int xcenter=getHeight()/2; 
            int ycenter=getWidth()/2; 
            int r=(int)(Math.min(getHeight(), getWidth())*0.4); 
    int x=xcenter-r; 
            int y=ycenter-r; 
    public void paintComponent(Graphics g){ 
        super.paintComponent(g); 
    g.setColor(Color.cyan); 
    System.out.println("x:"+x+" y:"+y+" r"+r);
    r = 5;
    g.drawArc(100, 20, 2*r, 2*r, 0, 60); 
    g.fillArc(29, 20, 2*r,2*r, 0, 60); 
    g.fillArc(30, 20, 2*r, 2*r, 90, 60); 
    g.fillArc(40, 20, 2*r, 2*r, 180,60); 
    g.fillArc(50, 20, 2*r, 2*r, 270, 60); 

    }