本世纪最大的难题,JAVA中 矩形和椭圆怎么做成用MOUSE拖动旋转,难倒我一周多了,谢谢,最好有例子代码,谢谢了,解决问题给200分,能帮助我解决问题的也给分,谢谢了,谢谢大家.

解决方案 »

  1.   

    Mouse拖动里面的捕获Mouse信息不用我说了吧
    给你写了一个旋转的代码看看
    public class TestPanel extends JPanel implements ActionListener{
      Timer timer=new Timer(100,this);
      double angle=0;
      public TestPanel() {
        timer.start();
      }
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g;
        g2.rotate(angle,125,150);
        g2.drawRect(100,100,50,100);
        g2.rotate(-angle,125,150);
        g2.drawLine(50,50,100,50);
      }  public void actionPerformed(ActionEvent actionEvent) {
        angle+=Math.PI/100;
        if(angle>Math.PI*2){
          angle=angle-Math.PI*2;
        }
        this.repaint();
      }
    }
      

  2.   

    http://www.finereport.com 可以的,而且做得很好的。
      

  3.   

    class   LXXPanel extends JPanel{
              private ImageIcon icon;
              private Image image;
              private AffineTransform t;
              private static int translate=100;
              private static int rotate=30;
              private static int Count=0;
              private static int CountArea=0;
              private Area area;
              public LXXPanel()
             {
                 icon=new ImageIcon(getClass().getResource("fight.gif"));
                 t=new AffineTransform();
                 t.setToTranslation(300,100);
                 image=icon.getImage();
                 addMouseListener(new MouseAdapter()
                         {
                          public void mouseClicked(MouseEvent event)
                             {
                                 Point2D point =event.getPoint();
                                 rotate(point);                         }
                         });
                 addMouseMotionListener(new MouseMotionAdapter()
                         {
                             public void mouseDragged(MouseEvent event)
                             {
                                 pictureDragged(event.getPoint());                         }
                         });
                  area=new Area();
             }
          public void repaint()
          {
                 System.out.println("DO repaint?");
                 Graphics g2=this.getGraphics();
                 paintComponent(g2);
          }
          public void paintComponent(Graphics g)
          {
              super.paintComponent(g);
              Graphics2D g2=(Graphics2D)g;
              g2.drawImage(image,t,null);
              System.out.println(area.isEmpty());
              if(area.isEmpty())
              {
                  area=new Area(new Rectangle2D.Double(100,100,100,100));
                  g2.fill(area);
                  System.out.println("do?");
                  g2.drawString("It is the area repaint "+Integer.toString(CountArea++),200,200);
              }
              g2.drawString("It is the whole panel repaint "+Integer.toString(Count++),100,100);      }
          public void rotate(Point2D point)
          {
            if(rotate>360) rotate=0;
              t.setToRotation(Math.toRadians(rotate),point.getX(),point.getY());
               rotate+=30;
              repaint();
          }
          public void translate()
          {
          }
          public void sheer()
          {
          }
           public void pictureDragged(Point2D point)
           {
             //  t.setToTranslation(point.getX(),point.getY());
               t=new AffineTransform().getTranslateInstance(point.getX(),point.getY());
                repaint();
             }      }
    部分代码 拿去改改  根据鼠标移动点重画就行
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.MouseInputAdapter;
     
    public class DragDemo extends JPanel
    {
        Rectangle r;
     
        public DragDemo()
        {
            DragController controller = new DragController(this);
            addMouseListener(controller);
            addMouseMotionListener(controller);
        }
     
        protected void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            if(r == null)
                initRect();
            g2.draw(r);
        }
     
        protected void setRect(int x, int y)
        {
            r.setLocation(x, y);
            repaint();
        }
     
        private void initRect()
        {
            int w = getWidth();
            int h = getHeight();
            r = new Rectangle(w/4, h/3, w/2, h/6);
        }
     
        public static void main(String[] args)
        {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(new DragDemo());
            f.setSize(400,400);
            f.setLocation(200,200);
            f.setVisible(true);
        }
    }
     
    class DragController extends MouseInputAdapter
    {
        DragDemo demo;
        Point offset;
        boolean dragging;
     
        public DragController(DragDemo dd)
        {
            demo = dd;
            offset = new Point();
            dragging = false;
        }
     
        public void mousePressed(MouseEvent e)
        {
            Point p = e.getPoint();
            if(demo.r.contains(p))
            {
                offset.x = p.x - demo.r.x;
                offset.y = p.y - demo.r.y;
                dragging = true;
            }
        }
     
        public void mouseReleased(MouseEvent e)
        {
            dragging = false;
        }
     
        public void mouseDragged(MouseEvent e)
        {
            if(dragging)
            {
                int x = e.getX() - offset.x;
                int y = e.getY() - offset.y;
                demo.setRect(x, y);
            }
        }
    }