0
我有一個40x40的窗格,顯示一張地圖。目前,我有以下幾種方法監聽右鍵點擊:Javafx - 確定光標相對於柵格的右擊位置
//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(由scenebuilder製作)和一個for循環來生成它。問題是,用上面添加的代碼作爲編輯(在我的主要問題中),得到的座標是錯誤的(總是39,39)。主要(階段被稱爲primaryStage,並且gridPane被命名爲root)。任何關於如何解決這個問題的建議? – asdf
@ JK96有沒有可能的方式來告訴你從你發佈的代碼片段中做了什麼錯誤。我的榜樣是否適合你?如果是這樣,你有什麼不同?你如何以及在哪裏定義代碼中的'col'和'row'? –
以下適用於我:菜單彈出。檢測到右擊,檢測到項目的選擇。 col和row是在一個循環內定義的,與你發佈的循環完全一樣,但是爲位置獲得的值似乎是錯誤的,並且不斷[39,39] – asdf