Java 使用鼠标侦听器移动绘制的形状

Java 使用鼠标侦听器移动绘制的形状,java,mouseevent,graphics2d,mouselistener,Java,Mouseevent,Graphics2d,Mouselistener,在一个简单的Paint java项目中,需要绘制形状,例如直线、圆、矩形等,。。。。。。。。 我正在尝试编写可以移动、删除和调整选定形状大小的方法。 我的代码应该是正确的,因为我已经在另一个有一个绘制矩形的项目中测试了它。 my paintComponent方法选择形状并将其添加到ArrayList @Override protected void paintComponent(Graphics g) { super.paintComponent(g);

在一个简单的Paint java项目中,需要绘制形状,例如直线、圆、矩形等,。。。。。。。。 我正在尝试编写可以移动、删除和调整选定形状大小的方法。 我的代码应该是正确的,因为我已经在另一个有一个绘制矩形的项目中测试了它。 my paintComponent方法选择形状并将其添加到ArrayList

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;


        for (ShapeItem item :shapes) {
            if (!(item.getShape() instanceof Line2D)){
                g2d.setColor(item.getColor());
                g2d.fill(item.getShape());
            }
            else {
//              g2d.setStroke(new BasicStroke(10));
                g2d.setColor(item.getColor());
                g2d.draw(item.getShape());
            }

        }

        if (selectedShape != null){
              g2d.setStroke ( new BasicStroke(1f, 
                       BasicStroke.CAP_ROUND, 
                       BasicStroke.JOIN_ROUND, 
                       1f, 
                       new float[] {2f}, 
                       0f) );
              if (selectedShape.getShape() instanceof Ellipse2D) {
                  Rectangle rect =  selectedShape.getShape().getBounds();

                  g2d.draw(rect);
              }

              else if (selectedShape.getShape() instanceof Rectangle2D) {
                  Rectangle2D dotted = new Rectangle2D.Double((int)((Rectangle2D) selectedShape.getShape()).getX() - 6, 
                                    (int)((Rectangle2D) selectedShape.getShape()).getY() - 6, 
                                    (int)((Rectangle2D) selectedShape.getShape()).getWidth() + 12, 
                                    (int)((Rectangle2D) selectedShape.getShape()).getHeight() + 12);  
                  g2d.draw(dotted);
              }

              else if (selectedShape.getShape() instanceof Line2D) {
                  Rectangle rect =  selectedShape.getShape().getBounds();

                  g2d.draw(rect); 
              }

              else if (selectedShape.getShape() instanceof Polygon) {
                  Rectangle rect =  selectedShape.getShape().getBounds();

                  g2d.draw(rect); 
              }
        }        
    }
类来移动形状

package draw;

import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
//import java.awt.event.MouseListener;
//import java.awt.event.MouseMotionListener;
//import java.awt.geom.Ellipse2D;
//import java.util.ArrayList;

import javax.swing.JComponent;

public class DynamicShapes extends JComponent{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    MoveShapes move = new MoveShapes();
    public DynamicShapes(){
        addMouseListener(move);
        addMouseMotionListener(move);
    }

    class MoveShapes extends MouseAdapter{
        private int x;
        private int y;
        boolean pressed;
        boolean dragged;
        DrawingPanel d = new DrawingPanel();
        @Override
        public void mousePressed(MouseEvent e){
            super.mousePressed(e);
             pressed = false;
            for (ShapeItem s : d.getShapes()){
                if(s.getShape().contains(e.getX() , e.getY()) ){
                    pressed = true;
                    System.out.println("shape is pressed");
                }
            }
        }
        @Override
        public void mouseDragged(MouseEvent e){
            super.mouseDragged(e);

            if(pressed){

                int dx = e.getX()-x;
                int dy = e.getY()-y;
                for (ShapeItem s : d.getShapes()){
                    Rectangle rect = s.getShape().getBounds();
                    if(s.getShape().getBounds2D().contains(x, y)){
                        rect.x += dx;
                        rect.y += dy;
                        repaint();
                    }
                    x += dx;
                    y += dy;
                }
            }
        }
    }


}

如果有人能帮忙的话,我对孔图形和鼠标事件没有太多的了解,因为这是我第一次:

问题出在哪里?你说你的代码应该可以正常工作,那么你为什么在这里问问题呢?移动代码应该是有效的,但它对孔项目不起作用:到底什么不起作用,或者你能观察到哪些效果?当我选择一个形状并尝试移动它时,它不会移动。我不知道它是否来自代码,或者缺少什么