我在一个程序中画二次曲线。
源程序如下:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;
import javax.swing.*;
//定义myQuadCurvePanel类,扩展JPanel类!
class myQuadCurvePanel extends Panel 
{
BorderLayout borderLayout = new BorderLayout();
Panel pdown = new Panel();
Checkbox check1,check2;
JLabel t1,t2,t3;
JLabel L1,L2,L3;
Point[] x = new Point[3];
int i,j = 0,k,flag = 0;
String ts1,ts2,ts3;

//定义myQuadCurvePanel的构造器!
public myQuadCurvePanel(){
   x[0] = new Point(10,150);
   x[1] = new Point(100,50);
   x[2] = new Point(200,150);
   this.setLayout(borderLayout);
   t1 = new JLabel();
   t2 = new JLabel();
   t3 = new JLabel();
   L1 = new JLabel();
   L2 = new JLabel();
   L3 = new JLabel();
   L1.setText("Point1:");
   L2.setText("Point2:");
   L3.setText("Point3:");
   ts1 = x[0].x + "," + x[0].y;
   ts2 = x[1].x + "," + x[1].y;
   ts3 = x[2].x + "," + x[2].y;
   t1.setText(ts1);
   t2.setText(ts2);
   t3.setText(ts3);    pdown.setBackground(Color.pink);
   this.add(pdown,BorderLayout.SOUTH);
   pdown.add(L1);
   pdown.add(t1);
   pdown.add(L2);
   pdown.add(t2);
   pdown.add(L3);
   pdown.add(t3);    //监听鼠标事件,当鼠标按下的时候,调用方法panel_mousePressed(),该方法将判断鼠标按下的位置是否为控制点的位置!
   addMouseListener(new MouseAdapter() {
      public void mousePressed (MouseEvent e) {
      panel_mousePressed(e);
  }
   });        //监听鼠标拖动事件,当鼠标拖动的时候,调用方法panel_mouseDragged(),该方法将判断鼠标按下的位置是否为控制点的位置!
   addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged (MouseEvent e) {
      panel_mouseDragged(e);
  }
   });
  
       }    //定义paint()方法,绘制控制点和控制线,然后调用draw_curve2D()方法绘制二次曲线
   public void paint(Graphics g){
       for(j = 0;j < 3;j++){
       g.fillOval(x[j].x-3,x[j].y-3,6,6);
   if(j >= 1){
       g.drawLine(x[j-1].x,x[j-1].y,x[j].x,x[j].y);
   }
   }
   draw_curve2D(g,x);
   }    //定义panel_mousePressed()方法,判断鼠标按下的位置是否在以控制点为中心的20个像素的长和宽的正方形区域中,如果是,设置flag=1!
   public void panel_mousePressed(MouseEvent e){
       Graphics g = getGraphics();
   int[] ax = new int[4];
   int[] ay = new int[4];
   int x0 = e.getX();
   int y0 = e.getY();
   Polygon a;
   for(i = 0;i < 3;i++){
       ax[0] = x[i].x-10;
   ax[1] = x[i].x+10;
   ax[2] = x[i].x+10;
   ax[3] = x[i].x-10;
   
   ay[0] = x[i].y-10;
   ay[1] = x[i].y-10;
   ay[2] = x[i].y+10;
   ay[3] = x[i].y+10;    a = new Polygon(ax,ay,4);
   if(a.contains(x0,y0)){
       k = i;
   flag = 1;
   }
   }    }    //定义panel_mouseDregged()方法,当flag=1时,修改控制点的坐标为鼠标移动的位置坐标,并且调用repaint()方法,重新绘制曲线!
   public void panel_mouseDragged(MouseEvent e){
       Graphics g = getGraphics();
   if(flag == 1){
        int x1 = e.getX();
int y1 = e.getY();
x[k].x = x1;
x[k].y = y1;
repaint();
   }
   }    //定义draw_curve2D()方法,定义2D图形上下文g,用3个控制点定义二次曲线curve,然后调用QuadCurve2D.Float的draw()方法
   //绘制曲线。最后用QuadCurve2D.Float的getX1()、getY1()、getCtrlX()、getCtrlY()、getX2()、getY2()方法返回控制点坐标,
   //然后将值赋给label,并显示在屏幕下方!
   public void draw_curve2D(Graphics g,Point[] x){
       Graphics2D g2D = (Graphics2D)g;
           QuadCurve2D.Float curve = new QuadCurve2D.Float(x[0].x,x[0].y,x[1].x,x[1].y,x[2].x,x[2].y);
           //Graphics2D g2D = (Graphics2D)g;
   g2D.draw(curve);
   ts1 = curve.getX1()+","+curve.getY1();
   ts2 = curve.getCtrlX()+","+curve.getCtrlY();
   ts3 = curve.getX2()+","+curve.getY2();
   t1.setText(ts1);
   t2.setText(ts2);
   t3.setText(ts3);
   }};//定义myQuadCurve类,扩展Frame类,加入myQuadCurvePanel
public class myQuadCurve extends JFrame 
{
public myQuadCurve(){
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    System.exit(0);
    }
    }); myQuadCurvePanel p = new myQuadCurvePanel();
p.setSize(400,300);
p.setBackground(Color.white);
this.setSize(500,400);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().setBackground(Color.black); this.getContentPane().add(p,BorderLayout.CENTER);
show();
} //定义mian()方法,显示窗体
public static void main(String[] args){
    myQuadCurve f = new myQuadCurve();

}
};我想将程序中的所画的point,line以及fillOval都改成graphic2D下坐标能够用double数据表示的图形:point2D,line2D及Ellipse2D但修改时遇到了几个问题;
1:x[0] = new Point(10,150);的定义改为x[0] = new Point2D.Double(10,150)后,坐标不能够用
   x[0].x和x[0].y这样表示,请问如何表示??
2:其中定义了个 Polygon(int,int,int),请问用double数据表示坐标的哪个方法能代替它??求教高手,解决了分全拿去,还可以再加!!!!