一个APPLET,上面8*8布了64个jpanel,每个jpanel的颜色是黑红错开的。
上面说的已经建好了,现在,我想在任一个jpanel上面画个实心圆出来,应该怎么做啊求教高手啊~~~~~

解决方案 »

  1.   

    Ellipse2D e = new Ellipse2D.Double(150, 200, 100, 50);
      

  2.   

    这个e 能加到jpanel上去么?
    如jp.add(e)?
      

  3.   

    paint一下就可以了,看看你的jpanel的事件,好象有个jpanel.paint(Graphics g)
     public void paint(Graphics g) {
    g.drawPolyline(int [] x, int [] y ,int pointNum);
    }利用楼上的Ellipse2D e = new Ellipse2D.Double(150, 200, 100, 50);,然后分别算出这个圆经过的点,一般60份差不多,也就是61个点,第一个和最后一个重合,利用上面的方法,但是好像上面的方法你需要改进一下,因为它的参数是int的,而算出来的则不可能是整形的,如果你需要很精确,可以取原上的更多的点。
    你还可以考虑用drawArc来画,可是这个方法中我不懂其中的一个参数的意思。
      

  4.   

    重载public void paint(Graphics g) {在这里做你画图,用g.画吧}
      

  5.   

    还是来一个现成的吧,代码如下,不过并不只是画圆:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class CircumCircle { public static void main(String[] args) {
    new JFCir().show();
    }
    }
    class JPCir extends JPanel
    {
    long diameter,x1,x2,y1,y2,cX,cY,radious;
    long startX,startY;
    public JPCir()
    {
    addMouseListener(new MouseAdapter()
    {
    public void mousePressed(MouseEvent m)
    {
    x1=m.getX();
    y1=m.getY();
    //System.out.println(x1+","+y1);
    }
    public void mouseReleased(MouseEvent m)
    {
    x2=m.getX();
    y2=m.getY();
    diameter=Math.round(Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2)));
    cX=Math.abs(x2-x1);
    cY=Math.abs(y2-y1);
    radious=diameter/2;
    startX=cX-radious;
    startY=cY-radious;
    //System.out.println(x2+","+y2);
    repaint();
    }
    }
    );
    }
    public void paintComponent(Graphics g)
    {
    int x1,y1,x2,y2,startX,startY,diameter,cX,cY;
    super.paintComponent(g);
    g.setColor(Color.RED);
    cX=(int)this.cX;
    cY=(int)this.cY;
    x1=(int)this.x1;
    y1=(int)this.y1;
    x2=(int)this.x2;
    y2=(int)this.y2;
    System.out.println(x1+","+y1);
    startX=(int)this.startX;
    startY=(int)this.startY;
    diameter=(int)this.diameter;
    g.drawLine(x1,y1,x2,y2);
    g.setColor(new Color(255,0,255));
    g.drawRect(startX,startY,diameter,diameter);
    g.setColor(Color.GREEN);
    g.drawOval(startX,startY/2,diameter,diameter);
    g.setFont(new Font("黑体",Font.BOLD,15));
    g.setColor(Color.BLACK);
    g.drawString("O",cX,cY);
    }
    }
    class JFCir extends JFrame
    {
    public JFCir()
    {
    setTitle("画圆和直线");
    setSize(600,400);
    //getComponent().add
    getContentPane().add(new JPCir());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
      

  6.   

    楼上:g.drawOval(startX,startY/2,diameter,diameter);
    画的圆没有填充不是实心圆,应该是:
    g.setColor(Color.Green);
    g.fillOval(startX,startY/2,diameter,diameter);