Java 使用鼠标移动和拉伸Line2D形状

Java 使用鼠标移动和拉伸Line2D形状,java,swing,mouseevent,java-2d,mouselistener,Java,Swing,Mouseevent,Java 2d,Mouselistener,我想用鼠标移动和拉伸Line2D形状。我试过了,但遇到了一些问题。在移动时,它突然向不同的方向移动。我面临以下问题: shape.setLine(p1,p2); 编辑: 早些时候,我遇到了一些问题 但我可以让它现在工作,因此我想在这里张贴 公共静态无效字符串[]args{ JFrame=新的JFrameLines frame.add(new JComponent() { private Shape line = null; { l

我想用鼠标移动和拉伸Line2D形状。我试过了,但遇到了一些问题。在移动时,它突然向不同的方向移动。我面临以下问题:

shape.setLine(p1,p2);
编辑:

早些时候,我遇到了一些问题

但我可以让它现在工作,因此我想在这里张贴

公共静态无效字符串[]args{ JFrame=新的JFrameLines

    frame.add(new JComponent() {
        private Shape line = null;
        {
            line = new Line2D.Double(100, 100, 200, 200);
            prevPoint = new Point();
            newPoint = new Point();

            MouseAdapter mouseAdapter = new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    prevPoint = e.getPoint();
                    System.out.println("Prev Point=" + prevPoint.toString());
                    repaint();
                }

                @Override
                public void mouseDragged(MouseEvent e) {
                    int dx = 0;
                    int dy = 0;

                    dx = (int) (prevPoint.x - e.getPoint().getX());
                    dy = (int) (prevPoint.y - e.getPoint().getY());

                    Line2D shape = (Line2D) line;

                    int x1 = (int) (shape.getX1() - dx);
                    int y1 = (int) (shape.getY1() - dy);

                    int x2 = (int) (shape.getX2() - dx);
                    int y2 = (int) (shape.getY2() - dy);

                    Point startPoint = new Point(x1, y1);
                    Point endPoint = new Point(x2, y2);

                    if (shape != null) {
                        shape.setLine(startPoint, endPoint);
                        prevPoint = e.getPoint();
                        repaint();
                    }
                }

                @Override
                public void mouseReleased(MouseEvent e) {
                    repaint();
                }

            };
            addMouseListener(mouseAdapter);
            addMouseMotionListener(mouseAdapter);
        }

        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setPaint(Color.BLUE);
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            if (line != null) {
                g2d.draw(line);
            }
        }
    });
    frame.setSize(650, 400);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

谢谢

您需要包含更多信息。请尽量提供一个最少的代码示例来演示问题。要更快地获得更好的帮助,请在问题的扩展部分贴上or.plus 1