就是这个图片,不知道应该怎么做,里面的椭圆是可以拖拽的,还有每个椭圆之间可以连线他会自己找最近的距离进行连接。连接的线也有2个焦点,可以进行拖拽。拖拽成曲线不知道这个需要怎么做。用什么做

解决方案 »

  1.   

    再用我的回答来占个坑:第一个问题, 对椭圆不熟, 不知道怎么做, 这个应该要看椭圆的相应特性了。另外一个就是这条曲线上,有2个点,就是平分这条曲线三段。这个点可以拖拽,曲线的形状就会变化。。
    1. 对用来画之个图形的组件, 如JPanel增加鼠标事件处理: addMouseListener和addMouseMotionListener
    2. 画两个小四边形(Rectangle)在这2个点处, 大小随意,宽跟高为2, 3, 4等都可试试, 找出最太平间的来, 用来处理拖拽。
    3. 当鼠标按下后, 检查鼠标的坐标是否在这2个小四边形中的某一个内。
    4. 如果在, 那么当鼠标被拖动时, 修改被拖动的小四边形的坐标, 也同时去计算修改那条曲线的数据, 重绘。 import java.awt.*;
    import java.awt.geom.*;
    import java.awt.event.*;
    import javax.swing.*;public class RectDragged extends JPanel {    private Rectangle2D rect1;
        private Rectangle2D rect2;
        private boolean     mouseInRect1 = false;
        private boolean     mouseInRect2 = false;    public RectDragged() {
            rect1 = new Rectangle2D.Float(20, 20, 8, 8);
            rect2 = new Rectangle2D.Float(60, 20, 8, 8);        this.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    if (rect1.contains(e.getPoint())) {
                        mouseInRect1 = true;
                    } else if (rect2.contains(e.getPoint())) {
                        mouseInRect2 = true;
                    }
                }            @Override
                public void mouseReleased(MouseEvent e) {
                    mouseInRect1 = false;
                    mouseInRect2 = false;
                }
            });        this.addMouseMotionListener(new MouseAdapter() {
                @Override
                public void mouseDragged(MouseEvent e) {
                    if (mouseInRect1) {
                        rect1.setFrame(e.getX(), e.getY(), rect1.getWidth(), rect1
                                .getHeight());                    RectDragged.this.repaint();
                    }                if (mouseInRect2) {
                        rect2.setFrame(e.getX(), e.getY(), rect2.getWidth(), rect2
                                .getHeight());                    RectDragged.this.repaint();
                    }
                }
            });
        }    @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);        Graphics2D g2d = (Graphics2D) g;
            
            g2d.setColor(Color.RED);
            g2d.fill(rect1);
            g2d.setColor(Color.GREEN);
            g2d.fill(rect2);
        }    private static void createGUIAndShow() {
            JFrame frame = new JFrame();        RectDragged rd = new RectDragged();
            frame.getContentPane().add(rd);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500, 500);
            frame.setVisible(true);
        }    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    RectDragged.createGUIAndShow();
                }
            });
        }}
      

  2.   

    this.addMouseMotionListener(new MouseAdapter() {
    我使用的是JDK6.10所以这个没有任何问题, 
    如果在你的机器上不行, 改为
    this.addMouseMotionListener(new MouseMotionAdapter() {
    即可。至于youjianbo_han_87, 我只想说,就是一丫的无事找抽型, 已经够给它面子了, 没说是人渣。
      

  3.   

    用ext,dojo,mootools等js库几句话就能实现拖拽功能