[英]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.