Javafx TreeCell键事件未触发
我与CellFactory有TreeView控件:Javafx TreeCell键事件未触发,javafx,treeview,javafx-8,keyevent,Javafx,Treeview,Javafx 8,Keyevent,我与CellFactory有TreeView控件: tVMain.setCellFactory(new Callback<TreeView<ITVItem>, TreeCell<ITVItem>>() { @Override public TreeCell<ITVItem> call(TreeView<ITVItem> p) { return new Tex
tVMain.setCellFactory(new Callback<TreeView<ITVItem>, TreeCell<ITVItem>>()
{
@Override
public TreeCell<ITVItem> call(TreeView<ITVItem> p)
{
return new TextFieldTreeCellImpl();
}
});
而不是OnKeyReleased,但仍然不起作用。
TextField
s通常使用它们处理的关键事件。尝试添加一个事件筛选器:this.addEventFilter(按下KeyEvent.KEY,e->{/*something*/})
keyevents被传递到聚焦节点(aka:focusOwner of scene)——该节点永远不是单元格,而是文本字段(编辑时)或表格(不编辑时)。更多信息:
private static class TextFieldTreeCellImpl extends TextFieldTreeCell<ITVItem>
{
private TextField textField;
public TextFieldTreeCellImpl()
{
this.setOnKeyPressed((e) -> {
startEdit();
});
}
public void startEdit()
{
super.startEdit();
if (textField == null)
{
textField = new TextField();
}
textField.setText(getString());
setText(null);
setGraphic(textField);
textField.selectAll();
textField.requestFocus();
}
@Override
public void cancelEdit()
{
super.cancelEdit();
setText(((ITVItem) getItem()).toString());
setGraphic(getTreeItem().getGraphic());
}
}
this.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
//SOMETHING
});