Я работаю над проектом, который позволяет пользователям щелкнуть штат в США, который затем отображает викторину, в которой спрашивается, что такое штат и столица. Состояния - это 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);
}
Спасибо за совет. Я не очень хорошо разбираюсь в Java и не знаком с перечислениями или с тем, как правильно запрашивать MouseEvent. Я нашел свое собственное решение, но я рассмотрю то, что вы сказали, как более эффективный метод решения проблемы.



Хотя я почти уверен, что это был не самый эффективный способ сделать это, я смог получить необходимые данные, установив MouseEvent внутри EventFilter. Таким образом, я смог просто передать текущую итерацию цикла foreach в событие.
for(SVGPath currState : allStates) {
//Color states
currState.setFill(Color.GRAY);
registerHandler(currState, Color.GRAY, Color.BLACK);
//Register mouse click
currState.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
//Set quiz data
if (currState.getContent().equals(washington)) {
QuizScreenController.setState("washington");
QuizScreenController.setCapital("seattle");
selectedState = currState;
} else if (currState.getContent().equals(california)) {
QuizScreenController.setState("california");
QuizScreenController.setCapital("sacramento");
selectedState = currState;
}
У вас есть доступ к
MouseEvent, источником которого будетSVGPath, который вы затем можете запросить в этом случае. Событие также дает доступ к локальным координатам, координатам сцены и экрана (x, y) мыши при щелчке. Что вы хотите сделать с этими координатами? Если вы хотите определить, в каком состоянии находится путь, вы всегда можете создать перечисление состояний и установить данные пользователя для каждого соответствующего пути.