如何在javafx中的treeview中添加多个侦听器? (悬停,专注)

时间:2017-01-09 01:43:26

标签: javafx

我做了树视图。我想像这样制作树视图。

  1. 当我输入鼠标到项目时,该项目应该更改图像。
  2. 当我抓住鼠标到项目时,该项目应该是chnage image。

    我知道getSelectionMode()的方式...但我不知道悬停事件。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

不确定我是否理解你的错误。

但是要在单击图像后立即更改图像,请使用selectedItemProperty侦听器:

treeView.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() {

    @Override
    public void changed(ObservableValue observable, Object oldValue,
            Object newValue) {

        TreeItem<String> selectedItem = (TreeItem<String>) newValue;
        // do something
    }

});

如果你想要它,只要将鼠标悬停在该项目上,就可以在该行上使用hoverProperty:

treeView.setRowFactory(tableView -> {
    final TableRow<Person> row = new TableRow<>();

    row.hoverProperty().addListener((observable) -> {
        final YourItem yourItem = row.getItem();

        if (yourItem.isHover() ) {
            // do something
        } else {
            // do something
        }
    });

    return row;
});

(此代码来自答案here

我想念,它关于TreeView。您可以在cellfactory中尝试使用onMouseEntered或类似的内容:

treeView.setCellFactory(tv ->  {
    final Tooltip tooltip = new Tooltip();
    TreeCell<Path> cell = new TreeCell<Path>() {
        @Override
        public void updateItem(Path item, boolean empty) {
            super.updateItem(item, empty);
        }
    };

    cell.setOnMouseClicked(e -> {
        // do something
    });

    cell.setOnMouseEntered(e -> {
        // do something
    });
    return cell ;
});