【发布时间】:2019-04-06 19:43:55
【问题描述】:
我想做的是画圆和线。
当第一次按下鼠标时,我画了一个小圆圈。那么,我需要 画一条线将原点连接到当前点 鼠标的位置。松开鼠标时,线条 仍然存在,但是当我再次单击时,一切都消失了,我画了一个 又是一圈又是一条线。
这是我目前的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Canvas4 extends JComponent implements MouseListener, MouseMotionListener {
//constructor
public Canvas4() {
super();
addMouseListener(this);
addMouseMotionListener(this);
}
//some variables I may or may not use
int pressedX;
int pressedY;
int currentX;
int currentY;
int startDragX;
int startDragY;
int endDragX;
int endDragY;
int mouseReleasedX;
int mouseReleasedY;
//mouse events
public void mouseClicked(MouseEvent event) { }
public void mouseEntered(MouseEvent event) { }
public void mouseExited(MouseEvent event) { }
public void mousePressed(MouseEvent event) {
pressedX = event.getX();
pressedY = event.getY();
drawCircle();
startDragX = pressedX;
startDragY = pressedY;
}
public void mouseReleased(MouseEvent event) {
mouseReleasedX = event.getX();
mouseReleasedY = event.getY();
//repaint() here maybe???
}
//mouse motion events
public void mouseDragged(MouseEvent event) {
System.out.println("You dragged the mouse.");
endDragX = event.getX();
endDragY = event.getY();
drawLine();
}
public void mouseMoved(MouseEvent event) { }
//draw circle when mouse pressed
//this method works fine
public void drawCircle() {
Graphics g1 = this.getGraphics();
g1.setColor(Color.CYAN);
g1.fillOval(pressedX, pressedY, 10, 10);
}
//draw line when mouse dragged
//this is where I need help
public void drawLine() {
Graphics g2 = this.getGraphics();
g2.setColor(Color.RED);
g2.drawLine(pressedX, pressedY, mouseReleasedX, mouseReleasedY);
}
}
当然,还有一个创建类对象并将其添加到框架之类的 main 方法。
我的两个具体问题是:
- 如何在拖动时画一条线?我目前的代码只画了一条线到鼠标释放的最后一点。
- 何时重绘?如果我在
drawCircle()方法中重新绘制,圆圈会闪烁,而不是在下次单击时消失。
【问题讨论】:
-
1) “我的两个具体问题是:” 每个 SO 问题线程都应该有确切的 一个 个具体问题。这有助于人们稍后寻找解决方案,帮助人们尝试回答问题和您。 2)“那当然有main方法”为了尽快获得更好的帮助,请发帖minimal reproducible example或Short, Self Contained, Correct Example。可能会提供帮助的人不必编写 main 方法来将代码显示在屏幕上。我们大多数人都有更好的事情要做,或者有人可以帮助他们这样做,因为这样做很容易帮助。
标签: java swing graphics mouselistener mousemotionlistener