鼠标被 JavaFX 中的 canvas 矩形覆盖

Mouse covered by canvas rectangle in JavaFX

我在 JavaFX 中有一个带有两个矩形的 canvas。我在开始时只绘制一次外层,每 0.25 秒重绘一次内层。当我输入 canvas 时,我将鼠标更改为十字准线并在离开时恢复为默认值。

我的问题是鼠标被内部矩形覆盖了。 我应该重新绘制鼠标还是在 JavaFX 中存在 css 中的 z-index 之类的东西?

您可以在 javafx 中实现类似 z-order 的东西,但如果您在 Canvas 上绘制所有内容,则不能。在 Canvas 上,绘图操作的顺序很重要。如果在光标之后绘制内部rect,光标会被后面的绘制操作覆盖。

但是,由于您对整个 canvas 使用相同的光标。我建议实际使用光标来更改光标的外观。为此,您可以使用带有十字准线图像的 ImageCursor

Image img = new Image(getClass().getResource("crosshair.png").toExternalForm());

// create cursor from image with hotspot at center
Cursor crosshair = new ImageCursor(img, img.getWidth()/2, img.getHeight()/2);

canvas.setCursor(crosshair);