0

グラフィックモデリングツールを実装しようとしています。

グラフィックモデリング

マウスをクリックすると、赤い頂点が生成されます。ある頂点から別の頂点にマウスをドラッグすると、線が描画されます。これが私が達成したいことです。しかし、私のコードは効果的にそれを行いません。以下は私のコードと問題です

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class NewClass extends JPanel {
    Point source,dest;
    BufferedImage image;
    Graphics2D imageGraphics;
    NewClass(){
    image= new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB);
    imageGraphics=image.createGraphics();
        this.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            if(e.getButton() == MouseEvent.BUTTON1){
                Point p=e.getPoint();
                paintPoint(p);
            }
        }

        @Override
        public void mousePressed(MouseEvent e){
            if(e.getButton() == MouseEvent.BUTTON1){
                source=e.getPoint();
            }
        }
        @Override
        public void mouseReleased(MouseEvent e){
            if(e.getButton() == MouseEvent.BUTTON1){                  
                    dest=e.getPoint();
                    paintLine();
            }
        }    
    });
}
   public void paintPoint(Point r){
    imageGraphics.setColor(Color.red);
    imageGraphics.fillOval(r.x,r.y,5,5);
    repaint();
}
public void paintLine(){
    imageGraphics.setColor(Color.black);
    imageGraphics.drawLine(source.x,source.y,dest.x,dest.y);
    repaint();
}
}

ただし、私が直面している問題は、mouseClickedEvent が生成されると、pressed と release も生成されることです。特に 3 つ以上の頂点を使用すると、間違った線が生成されます。

頂点を押して次の頂点に移動し、そこで離したときにのみ線を描画したい。

この問題はどのように解決できますか?

4

2 に答える 2

1

あなたは単にオーバーライドすることができますmouseDragged(MouseEvent e)、それはあなたの使用法のために作られています。

于 2013-10-25T11:37:45.910 に答える