Javafx 2 双击树节点时如何触发事件
我有一段代码,它在远程Java类中创建了新的选项卡Javafx 2 双击树节点时如何触发事件,javafx-2,javafx,javafx-8,Javafx 2,Javafx,Javafx 8,我有一段代码,它在远程Java类中创建了新的选项卡 treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() { @Override public void changed(ObservableValue<? extends TreeItem<Stri
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);
}
});
treeView.getSelectionModel().SelectEditeProperty().addListener(新的ChangeListener())
{
@凌驾
public void已更改(observeValue您可以向TreeView.setOnMouseClicked()
方法添加EventHandler
,并检查getClickCount()
返回MouseEvent
的值,以确定它是否是双击。删除上面的ChangeListener
,并将逻辑添加到EventHandler
它看起来是这样的。您可能还需要检查该项的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);
}
}
});
treeView.setOnMouseClicked(新建EventHandler())
{
@凌驾
公共无效句柄(MouseEvent MouseEvent)
{
if(mouseEvent.getClickCount()==2)
{
TreeItem=treeView.getSelectionModel().getSelectedItem();
System.out.println(“所选文本:+item.getValue());
//创建新选项卡
Tab tabdata=new Tab();
标签标签标签=新标签(“测试”);
tabdata.setGraphic(tabALabel);
DataStage.addNewTab(tabdata);
}
}
});
在我看来,最佳实践是实现您的计算单元
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.
});
}
}
公共类DoubleClickCellImpl扩展TreeCell{
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(项==null | |空){
setText(空);
}否则{
setText(项目);
}
}
公共DoubleClickCellImpl(){
超级();
setOnMouseClicked(事件->{
TreeItem ti=getTreeItem();
if(ti==null | | event.getClickCount()<2)
返回;
//在这里做点什么。
});
}
}
你能给我看一些实现代码吗?我是JavaFX新手,这对我来说是一个高级的东西。如果他们用另一种方法(比如键盘)扩展一个节点怎么办?我想我们必须将多个事件绑定到同一个处理程序=/。似乎应该有一个处理程序来处理这类事情。(onNodeActivated或其他)@此答案特定于双击操作。如果要触发任何展开/折叠事件,则需要查看TreeItem.expandedProperty()
。可以向其添加ChangeListener
(可能通过TreeCell
工厂)并在此处添加您的功能。请在此处签出答案: