我有CellFactory的TreeView控件:
tVMain.setCellFactory(new Callback<TreeView<ITVItem>, TreeCell<ITVItem>>()
{
@Override
public TreeCell<ITVItem> call(TreeView<ITVItem> p)
{
return new TextFieldTreeCellImpl();
}
});
TextFieldTreeCellImpl:
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());
}
}
问题是OnKeyPressed事件永远不会触发。我尝试使用OnKeyReleased,但结果是一样的 - 没有事件。 TextFieldTreeCellImpl也有OnMouseReleased事件(为简洁起见未在代码中显示),它们可以正常工作。
最后信息:当TextFieldTreeCellImpl处于编辑模式时(已调用startEdit()且textField可见),将触发事件。但是当取消编辑并删除textField时,事件不会再次触发。
如何在非编辑模式下触发关键事件?
编辑: 回应James_D的评论:我也尝试添加
this.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
//SOMETHING
});
而不是OnKeyReleased但仍然不起作用。