Я пытаюсь нарисовать круги и линии.
При первом нажатии мыши я рисую маленький круг. Тогда мне нужно
провести линию, соединяющую исходную точку с током
положение мыши . Когда мышь отпущена, линия
остается, но когда я нажимаю снова, все исчезает, и я рисую
круг и линия снова и снова.
Это код, который у меня есть:
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()
, круг мигает, а не исчезает при следующем щелчке.