6

我有这段代码在远程 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);
            }
        });

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

4

2 回答 2

11

您可以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);
        }
    }
});
于 2013-06-28T18:02:48.990 回答
2

在我看来,最好的做法是实现你的单元格。

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.
        });
    }
}
于 2018-11-27T04:04:21.317 回答