0
我正在使用JavaFX构建绘图程序。我试图用GraphicsContext绘制一个Rectangle,并设法让它在画布上绘制。但是,无论我点击什么,它总是从原点开始。当我释放鼠标(这是正确完成的)时,矩形会停止绘制,但当按下鼠标时不会绘制该矩形。这里是我的代码:如何将JavaFX上绘制的矩形的原点更改为我点击鼠标的位置?
public RectController(Canvas c, Scene s, BorderPane borderPane){
this.borderPane = borderPane;
this.scene = scene;
this.graphicsContext = canvas.getGraphicsContext2D();
rectangle = new Rectangle();
rectangle.setStrokeWidth(1.0);
rectangle.setManaged(true);
rectangle.setMouseTransparent(true);
//when you first press down on the mouse
pressMouse = event -> {
// borderPane.getChildren().add(rectangle); --> REMOVED
double startX = event.getX();
double startY = event.getY();
};
releaseMouse = event -> {
borderPane.getChildren().remove(rectangle);
double width = Math.abs(event.getX() - startX);
double height = Math.abs(event.getY() - startY);
graphicsContext.strokeRect(startX, startY, width, height);
borderPane.setOnMousePressed(null);
borderPane.setOnMouseDragged(null);
borderPane.setOnMouseReleased(null);
};
dragMouse = event -> {
rectangle.setWidth(event.getX());
rectangle.setHeight(event.getY());
};
}
任何帮助将不胜感激。
也许你应该先获取鼠标的x和y位置或事件的x和y位置。然后使用这些值来知道在哪里创建矩形。您应该在鼠标点击处理程序中创建一个新的Rectangle。另外,在你的代码中,我没有看到你设置矩形的位置。 – Sedrick
您好@SedrickJefferson,我在这里设置位置:'graphicsContext.strokeRect(startX,startY,width,height);'?或者这是不正确的做法吗? – xn139
请勿使用边框窗格。边框窗格是一个布局窗格,用于管理其子节点的布局;你应该把矩形放在一个普通的“窗格”中。 –