如何在TreeItem JavaFX上添加KeyListener?
我有一个带有TreeView的项目,我希望如果我选择一个TreeItem并键入DELETE,则与之相关的文件会在磁盘上自动删除。但它不起作用,我也不能仅仅通过在互联网上搜索来找到我的答案。这是我的函数(ListArbres是一个树状视图):如何在TreeItem JavaFX上添加KeyListener?,java,javafx,treeview,keylistener,Java,Javafx,Treeview,Keylistener,我有一个带有TreeView的项目,我希望如果我选择一个TreeItem并键入DELETE,则与之相关的文件会在磁盘上自动删除。但它不起作用,我也不能仅仅通过在互联网上搜索来找到我的答案。这是我的函数(ListArbres是一个树状视图): private void recupereFichierProjet(文件目录、文件过滤器过滤器){ 文件[]fichiers=repertoire.listFiles(filter); TreeItem rootItem=新的TreeItem(“工作区”)
private void recupereFichierProjet(文件目录、文件过滤器过滤器){
文件[]fichiers=repertoire.listFiles(filter);
TreeItem rootItem=新的TreeItem(“工作区”);
setExpanded(true);
用于(文件fichier:fichiers){
Projet Projet=Projet.charge(费希尔);
TreeItem=newTreeItem(fichier.getName());
item.addEventHandler(KeyEvent.KEY_类型,事件->{
if(event.getCode()==KeyCode.DELETE){
系统输出打印项次(“la”);
超级项目(
新文件(“./workspace/”+listerbres.getSelectionModel().getSelectedItem().getValue());
initialiseTreeView();
}
});
rootItem.getChildren().add(项);
对于(Arbre-Arbre:projet.getarbredupjet()){
TreeItemBis=新的TreeItem(arbre.getEntete().getNomfonAction());
item.getChildren().add(itemBis);
}
}
listerbres.setRoot(rootItem);
listerbres.setVisible(true);
}
我想我知道addEventHandler是用于不同事件的,所以我不知道如何在对象“Item”上使用KeyListener
“Projet”上的静态方法“supprime”用于删除我的文件
事先谢谢。(对我的英语不好表示歉意)。如(在“TreeItem事件”下)所述:
但是需要注意的是,TreeItem不是节点,它是
意味着只传递TreeItem中定义的事件类型。
要收听一般事件(例如鼠标交互),它是
需要将必要的侦听器添加到包含在
树视图(通过提供一个单元工厂)
但是,对于按键操作,实际的单元格不会获得键盘焦点,因此它们不会接收按键事件。因此,这里真正需要的是,当TreeView
具有焦点且按下delete键时,删除树中的选定项。所以你需要
TreeView<String> tree = ... ;
tree.setOnKeyPressed(e -> {
TreeItem<String> selected = tree.getSelectionModel().getSelectedItem();
if (selected != null && e.getCode() == KeyCode.DELETE) {
System.out.println("Delete pressed on "+selected.getValue());
// delete file associated with selected.getValue()...
}
});
TreeView tree=;
tree.setonkey按下(e->{
TreeItem selected=tree.getSelectionModel().getSelectedItem();
if(选中!=null&&e.getCode()==KeyCode.DELETE){
System.out.println(“按Delete键+selected.getValue());
//删除与所选.getValue()关联的文件。。。
}
});
还有几点需要注意:
TreeView
并修改单元格实现中的updateItem
方法来显示文件名可能(更有意义)。然后,您可以使用侦听器中的getItem()
直接获取该文件,删除该文件的代码将更加容易我没有使用Cell类,但是按下setOnKeyPressed时,我有一个响应:)非常感谢您的快速回答James\D
TreeView<String> tree = ... ;
tree.setOnKeyPressed(e -> {
TreeItem<String> selected = tree.getSelectionModel().getSelectedItem();
if (selected != null && e.getCode() == KeyCode.DELETE) {
System.out.println("Delete pressed on "+selected.getValue());
// delete file associated with selected.getValue()...
}
});