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

Pet*_*zov 6 javafx javafx-2 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);
            }
        });
Run Code Online (Sandbox Code Playgroud)

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

Ott*_*ime 9

您可以EventHandler<MouseEvent>TreeView.setOnMouseClicked()方法添加一个并检查其getClickCount()返回值,MouseEvent以确定它是否为双击.删除ChangeListener上面的内容并添加逻辑EventHandler.

使用此处的说明并将其应用于您的treeView变量.

它看起来像这样.你可能也想检查项目null.

treeView.setOnMouseClicked(new EventHandler<MouseEvent>()
{
    @Override
    public void handle(MouseEvent mouseEvent)
    {            
        if(mouseEvent.getClickCount() == 2)
        {
            TreeItem<String> item = treeView.getSelectionModel().getSelectedItem();
            System.out.println("Selected Text : " + item.getValue());

            // Create New Tab
            Tab tabdata = new Tab();
            Label tabALabel = new Label("Test");
            tabdata.setGraphic(tabALabel);

            DataStage.addNewTab(tabdata);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)