双击树节点时如何触发事件

时间:2013-06-27 16:23:20

标签: javafx-2 javafx javafx-8

我有这个代码在远程Java类中创建新选项卡。

treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>()
        {
            @Override
            public void changed(ObservableValue<? extends TreeItem<String>> observable, TreeItem<String> oldValue, TreeItem<String> newValue)
            {
                System.out.println("Selected Text : " + newValue.getValue());
                // Create New Tab
                Tab tabdata = new Tab();
                Label tabALabel = new Label("Test");
                tabdata.setGraphic(tabALabel);

                DataStage.addNewTab(tabdata);
            }
        });

当我双击树节点时,您能告诉我如何修改代码以打开新选项卡。在我的代码中,单击一次时将打开选项卡。我需要什么样的事件处理程序?

2 个答案:

答案 0 :(得分:9)

您可以向EventHandler<MouseEvent>方法添加TreeView.setOnMouseClicked(),并检查getClickCount()的{​​{1}}返回值,以确定它是否为双击。移除上面的MouseEvent并将逻辑添加到ChangeListener

Use the description here and apply it to your treeView variable.

它看起来像这样。您可能也想检查EventHandler的项目。

null

答案 1 :(得分:1)

我认为,最佳实践是实现您的单元格。

public class DoubleClickCellImpl extends TreeCell<String> {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (item == null || empty) {
            setText(null);
        } else {
            setText(item);
        }
    }

    public DoubleClickCellImpl() {
        super();

        setOnMouseClicked(event -> {
            TreeItem<String> ti = getTreeItem();
            if (ti == null || event.getClickCount() < 2)
                return;

            // do something here.
        });
    }
}