У меня есть сетка 40x40 с отображением карты. В настоящее время у меня есть следующие методы прослушивания для правой кнопки мыши:Javafx - Определить положение курсора по правому клику относительно gridpane
//detect right click + display menu, select if you want to place item 1 or item 2
final ContextMenu cm = new ContextMenu();
cm.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
if (event.getButton() == MouseButton.SECONDARY)
event.consume();
}
});
cm.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Following item selected: "+
((MenuItem)event.getTarget()).getText());
}
});
//two placeable items
MenuItem item1Place = new MenuItem("Item 1");
MenuItem item2Place = new MenuItem("Item 2");
cm.getItems().addAll(item1Place, item2Place);
primaryStage.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent e)
{
if (e.getButton() == MouseButton.SECONDARY)
{
cm.show(primaryStage, e.getScreenX(), e.getScreenY());
}
}
});
То, что я хотел бы реализовать это следующим образом:
Если пункт меню выбран после того, как правая кнопки мыши, я» d хотел бы сохранить положение правого щелчка в переменной
например [32,12], если правой кнопкой мыши был 32 блока сетки поперек и 12 блоков вверх.
Любые предложения о том, как это сделать?
Заранее спасибо
// first edit code entered below. I realise the indentation is very off however fixing it seemed to turn it back to plain text
placeItem1.setOnAction(evt -> System.out.println("Item 1 placed ["+col+", "+row+"]"));
placeItem2.setOnAction(evt -> System.out.println(Item 2 placed["+col+", "+row+"]"));
menu.show(cell, e.getScreenX(), e.getScreenY());
});
root.add(cell, x, y);
Спасибо, я сделал некоторый прогресс, однако есть одна проблемы. У меня есть gridpane (созданный с помощью сценариста) и цикл for, чтобы сгенерировать его уже. Проблема в том, что код, который я добавил выше, как редактирование (в моем основном вопросе), полученные координаты неверны (всегда 39,39). Основной (этап называется primaryStage, а gridPane - root). Какие-нибудь предложения относительно того, как я буду решать это? – asdf
@ JK96 нет никакого способа рассказать, что вы сделали неправильно из фрагмента кода, который вы опубликовали. Мой пример работает на вас? Если да, то чем вы занимаетесь по-другому? Как и где вы определяете 'col' и' row' в вашем коде? –
следующие работы для меня: появляется меню. обнаружен щелчок правой кнопкой мыши, выбор элемента обнаружен. col и row определены в цикле точно так же, как и тот, который вы опубликовали, однако значения, полученные для позиции, кажутся неправильными, и постоянно [39,39] – asdf