【发布时间】:2019-03-27 11:03:56
【问题描述】:
我正在开发一个项目,该项目允许用户单击美国的一个州,然后显示一个测验,询问该州和首都是什么。状态是 SVGPaths。我需要鼠标事件处理程序来确定单击了哪个 SVGPath 以确定测验数据。如何获取从处理程序中单击的 SVGPath 的坐标?
//Mouse event handler for attacking states
EventHandler<MouseEvent> clickState = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
/*
* Register quiz data here
*
* QuizScreenController.setState(state);
* QuizScreenController.setCapital(capital)
*/
//Load quiz screen
loadQuiz("State Quiz");
}
};
//allStates is an SVGPath array that stores the individual state paths
for(SVGPath currState : allStates) {
//Color states
currState.setFill(Color.GRAY);
registerHandler(currState, Color.GRAY, Color.BLACK);
//Register mouse event
currState.addEventFilter(MouseEvent.MOUSE_CLICKED, clickState);
}
【问题讨论】:
-
您可以访问
MouseEvent,其来源将是SVGPath,然后您可以查询,在这种情况下。该事件还允许在单击时访问鼠标的本地、场景和屏幕 (x,y) 坐标。你想用这些坐标做什么?如果你想确定路径是哪个状态,你总是可以创建一个状态枚举并在每个适当的路径上设置user data。 -
感谢您的建议。我对 Java 不是很流利,也不熟悉枚举或如何正确查询 MouseEvent。我找到了自己的解决方案,但我会研究您所说的解决问题的更有效方法。