【发布时间】:2019-12-30 17:04:06
【问题描述】:
我正在尝试创建一个程序,该程序应基于两次鼠标左键单击在画布上绘制一个矩形,并单击一次右键清除画布。
矩形的创建方式应该是,第一次鼠标单击模拟矩形的一个角,与第一次鼠标单击相比,下一次鼠标单击模拟矩形的对角角。
我不知道如何存储第一次鼠标单击的坐标,然后充分利用第二次鼠标单击,因为每个定义的矩形仅基于一组坐标创建,即上-矩形的左角。
现在,我的代码所做的只是绘制固定大小的矩形 (50x25),这显然不是我想要的。这只是为了看看清除部分是否有效。
这是我目前得到的:
package application;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class DrawRectangle extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Title");
Canvas canv = new Canvas(500, 400);
GraphicsContext gc = canv.getGraphicsContext2D();
EventHandler<MouseEvent> event = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getButton() == MouseButton.PRIMARY) {
double x = event.getX();
double y = event.getY();
gc.setFill(Color.BLUE);
gc.fillRect(x, y, 50, 25);
}
}
};
canv.addEventHandler(MouseEvent.MOUSE_CLICKED, event);
EventHandler<MouseEvent> event2 = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event2) {
if (event2.getButton() == MouseButton.SECONDARY) {
gc.clearRect(0, 0, 500, 400);
}
}
};
canv.addEventHandler(MouseEvent.MOUSE_CLICKED, event2);
StackPane root = new StackPane();
root.getChildren().add(canv);
primaryStage.setScene(new Scene(root, 500, 400));
primaryStage.show();
}
}
我不知道鼠标点击应该模拟矩形的哪个角是否重要,也许有人有任何想法?
最好的问候和新年快乐
【问题讨论】:
标签: java javafx canvas drawing rectangles