TreeCell关键事件未触发

时间:2015-12-03 13:30:44

标签: 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 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但仍然不起作用。

0 个答案:

没有答案