How to trigger event when double click on a tree node
16,655
Solution 1
You can add an EventHandler<MouseEvent>
to the TreeView.setOnMouseClicked()
method and check for the getClickCount()
return value of the MouseEvent
to determine if it was a double click. Remove the ChangeListener
above and add the logic to the EventHandler
.
Use the description here and apply it to your treeView
variable.
It'll look something like this. You'll probably want to check the item for null
as well.
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);
}
}
});
Solution 2
In my opinion, the best practice is to implement your cell.
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.
});
}
}
Author by
Peter Penzov
Updated on June 13, 2022Comments
-
Peter Penzov almost 2 years
I have this code which creates new tab in a remote Java Class.
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); } });
Can you tell me how I can modify the code to open new tab when I double click on a tree node. In my code the tab is opened when I click once. What event handler do I need?