javajavafx:基于2次鼠标点击在画布上绘制一个矩形
我正在尝试创建一个程序,它应该基于两次鼠标左键单击在画布上绘制一个矩形,并通过一次鼠标右键单击清除画布
创建矩形时,第一次鼠标单击模拟矩形的一个角,下一次鼠标单击与第一次鼠标单击相比模拟矩形的对角
我被困在如何存储第一次鼠标单击的坐标上,然后再好好利用第二次鼠标单击,因为每个定义的矩形仅基于一组坐标创建,即矩形的左上角
现在,我的代码所做的就是绘制固定大小的矩形(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();
}
}
我不知道鼠标点击矩形的哪个角是否重要,也许有人有什么想法
致以最良好的祝愿,新年快乐
# 1 楼答案
只需将第一个单击点保存在成员变量中,然后使用它,并在用户创建第二个单击点时重置它
注意:下面的示例代码使用来自Java13+的switch expression。如果Java版本中没有开关表达式,请将其转换为标准开关语句或If/else子句