簡體   English   中英

鼠標監聽器界面和繪畫

[英]Mouse Listener Interface and painting

我正在嘗試實現圖形建模工具。

圖形建模

在鼠標單擊時,將生成一個紅色頂點。 將鼠標從一個頂點拖動到另一個頂點時,應繪制一條線。 這就是我想要實現的目標。 但我的代碼沒有有效地做到這一點。 以下是我的代碼和問題

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時,它也會生成按下和釋放。 特別是當使用三個以上的頂點時,會生成錯誤的線條。

我希望僅在按下頂點時移動線條,移動到下一個頂點然后在那里釋放。

怎樣才能解決這個問題?

mouseReleased檢查發布的位置,如果它與你的source相同,你有一個點擊而不是拖動。 您也可以使用此方法完全擺脫mouseClicked

您可以簡單地覆蓋mouseDragged(MouseEvent e) ,它是為您的用途而設計的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM