我现在想的只是一个快速问题:

我有一个JavaFX应用程序,其中包含(除其他之外)ScrollPane,并且我需要捕获该ScrollPane的MouseClicked事件。实际上,这本身没有问题,只是我仅需要在事件目标是Rectangle,ToggleButton或ScrollPaneSkin的实例的情况下处理该事件。我知道,这实际上也很容易。现在,我有以下代码:

@FXML
void scrollPaneOnMouseClicked(MouseEvent event) {
    System.out.println(event.getTarget().getClass().getName());
    System.out.println(event.getTarget() instanceof  ScrollPaneSkin);
    if (event.getTarget() instanceof RoomRectangle || event.getTarget() instanceof ToggleButton || event.getTarget() instanceof ScrollPaneSkin) {
        // handle
    }
}


除了即使event.getTarget() instanceof ScrollPaneSkin输出System.out.println(event.getTarget().getClass().getName());(并且调试器确认),com.sun.javafx.scene.control.skin.ScrollPaneSkin$4仍为false。

我还尝试了event.getTarget() instanceof ScrollPaneSkin$4,导致出现“找不到符号”错误。

我在这里想念什么?

最佳答案

好的,我自己修复了。问题很简单,原因是$4。正如我刚刚发现的那样,$4指向ScrollPaneSkin的匿名内部类,显然它不能从外部访问。这意味着目标实际上不是ScrollPaneSkin的实例,而是该内部类的实例。唯一的解决方法是使用event.getTarget.getClass().getName()并进行字符串比较。 (解决方案取自here

08-08 00:29