我希望点一次MINUS就能让环上的小圆少一个 但是JosephP又需要用到JosephAwt的变量n 但是怎么用呢?import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;class JosephAwt extends JFrame implements ActionListener{
public JosephAwt(){
add(bu1,BorderLayout.SOUTH);
add(p,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,500);
setVisible(true);
}

int n=8;
/* public int getN(){
return n;
}*/
Graphics g;
JosephP p=new JosephP();
JButton bu1=new JButton("MINUS");
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==bu1)
        n--;
        p.paint(g);
    }
  
public static void main(String[] args){
JosephAwt f = new JosephAwt();
}
} class JosephP extends JPanel{
//JosephAwt f = new JosephAwt();
static double PI=3.1415926;
int x=50;
int y=70;
int rbig=150;
int xCenterB=x+rbig;//大圆圆心
int yCenterB=y+rbig;

int rsmall=30;
int xCenterS,yCenterS;
int n=8;//小圆个数

public void paint(Graphics g) {
g.drawOval(x,y,2*rbig,2*rbig);
for(int i=0;i<n;i++){
xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
g.setColor(Color.red);
g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
g.setFont(new Font("",Font.BOLD,23));
g.drawString(""+i,xCenterS,yCenterS); 
}
}
}

解决方案 »

  1.   

    public:表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用 private:表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用
      

  2.   

     建议把JosephP做成 JosepAWT的内部类,或者在给JosephP对像传入一个JosepAWT的对象
      

  3.   


    设成public static ?
    把谁设成public static?
      

  4.   

    把N写一个get方法
    试过了 不知道怎么总是不行
      

  5.   

    有新的问题 不知道各位能不能解决?如何用repaint()?
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;
    import javax.swing.event.*;public class JosephAwt extends JPanel { static double PI=3.1415926;
    int x=50;
    int y=70;
    int rbig=150;
    int xCenterB=x+rbig;//大圆圆心
    int yCenterB=y+rbig;

    int rsmall=30;
    int xCenterS,yCenterS;
        //小圆个数
    static int n=8;

    public void paint(Graphics g) {
    g.drawOval(x,y,2*rbig,2*rbig);
    for(int i=0;i<n;i++){
    xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
    yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
    g.setColor(Color.red);
    g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
    g.setFont(new Font("",Font.BOLD,23));
    g.drawString(""+i,xCenterS,yCenterS); 
    }
    }  
      
    public static void main(String[] args){
    //JosephAwt f1 = new JosephAwt();

    Graphics g;

    JFrame f=new JFrame();
    JButton bu1=new JButton("ss");
    JComponent newContentPane = new JosephAwt();
    bu1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
    n--;
    g.repaint();
    }

    }); //JComponent newContentPane = new JosephAwt();
        f.add(bu1,BorderLayout.SOUTH);
    f.add(newContentPane,BorderLayout.CENTER);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(400,500);
    f.setVisible(true);
    }
    }
      

  6.   

    Graphics g = new Graphics ();
    你至少创建一个实例啊
      

  7.   

    提示说Graphics g = new Graphics (); 不能创建实例
      

  8.   

    好了
    谢谢大家
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;
    import javax.swing.event.*;public class JosephAwt extends Canvas {    static double PI=3.1415926;
        int x=50;
        int y=70;
        int rbig=150;
        int xCenterB=x+rbig;//大圆圆心
        int yCenterB=y+rbig;
        
        int rsmall=30;
        int xCenterS,yCenterS;
        //小圆个数
        static int n=8;
        
        public void paint(Graphics g) {
            g.drawOval(x,y,2*rbig,2*rbig);
            for(int i=0;i<n;i++){
                xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
                yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
                g.setColor(Color.red);
                g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
                g.setFont(new Font("",Font.BOLD,23));
                g.drawString(""+i,xCenterS,yCenterS);
            }
        }    public static void main(String[] args){
            //JosephAwt f1 = new JosephAwt();
            
            Graphics g;
            
            JFrame f=new JFrame();
            JButton bu1=new JButton("ss");
            final JComponent newContentPane = new JPanel();
            final Canvas newCanvas = new JosephAwt();
            newCanvas.setSize(400,400);
            newContentPane.add(newCanvas);
            f.setContentPane(newContentPane);
            bu1.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {
                    n--;
                    newContentPane.remove(newCanvas);
                    newContentPane.add(newCanvas);                }
        
            });
            //JComponent newCanvas = new JosephAwt();
            f.add(bu1,BorderLayout.SOUTH);
            f.add(newCanvas,BorderLayout.CENTER);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(400,500);
            f.setVisible(true);
        }
    }