如何在JavaFX ListView上触发鼠标单击事件?

时间:2016-01-05 21:24:21

标签: listview events javafx onmouseclick

如何在javafx.scene.control.ListView的第一个(或任何其他)项目上触发单击和双击鼠标事件?

我想收到这样的事件:

getListView().setOnMouseClicked(mouseEvent -> {
    switch (mouseEvent.getClickCount()) {
        case 1:
            break;
        case 2:
            break;
    }
});

1 个答案:

答案 0 :(得分:1)

似乎存在误解。事件不会在ListView的项目上触发,而是在显示项目的ListCell上触发。 ListCell可以动态构造并重用,因此可能没有与特定项目相对应的事件目标。

如果您使用了正确的节点,则可以使用Event.fireEvent触发事件:

Node target = ...
MouseEvent mouseEvent = new MouseEvent(MouseEvent.MOUSE_CLICKED, ...);
Event.fireEvent(target, mouseEvent);

您还可以使用lookupAll找到ListCell

Set<Node> listCells = listView.lookupAll(".list-cell");

并使用ListCell.getItemListCell.getIndex来确定正确的。

但是,由于事件监听器被添加到ListView,因此可能没有必要找到正确的ListCell