我现在想的只是一个快速问题:
我有一个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)