Skip to content
Snippets Groups Projects
Commit 08fd7c8b authored by AREZKI Celia's avatar AREZKI Celia
Browse files

Add mouse event handling to allow the user to draw a rectanglein Drawer class

parent 0b28f0d0
Branches
No related tags found
No related merge requests found
......@@ -2,21 +2,51 @@ package shape.tp5;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import java.util.ArrayList;
import java.util.List;
public class Drawer extends Canvas {
private List<Shape> shapes;
class Drawer extends Canvas {
private List<Shape> shapes = new ArrayList<>();
private double startX, startY, endX, endY;
private boolean drawing = false;
public Drawer(double width, double height) {
super(width, height);
shapes = new ArrayList<>();
setOnMousePressed(this::handleMousePressed);
setOnMouseDragged(this::handleMouseDragged);
setOnMouseReleased(this::handleMouseReleased);
}
private void handleMousePressed(MouseEvent event) {
if (event.getButton() == MouseButton.PRIMARY) {
startX = event.getX();
startY = event.getY();
drawing = true;
}
}
private void handleMouseDragged(MouseEvent event) {
if (drawing) {
endX = event.getX();
endY = event.getY();
repaint();
}
}
public void add(Shape shape) {
shapes.add(shape);
private void handleMouseReleased(MouseEvent event) {
if (drawing) {
endX = event.getX();
endY = event.getY();
shapes.add(new Rectangle(Math.min(startX, endX), Math.min(startY, endY),
Math.abs(endX - startX), Math.abs(endY - startY)));
drawing = false;
repaint();
}
}
public void repaint() {
GraphicsContext gc = getGraphicsContext2D();
......@@ -24,14 +54,10 @@ public class Drawer extends Canvas {
for (Shape shape : shapes) {
shape.paint(gc);
}
if (drawing) {
gc.setStroke(javafx.scene.paint.Color.BLACK);
gc.strokeRect(Math.min(startX, endX), Math.min(startY, endY),
Math.abs(endX - startX), Math.abs(endY - startY));
}
public Shape shapeContaining(double x, double y) {
for (Shape shape : shapes) {
if (shape.contains(x, y)) {
return shape;
}
}
return null;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment