如何在vaadin 8网格中设置焦点并打开新插入行的网格单元格编辑器?

时间:2017-06-05 11:18:52

标签: vaadin-grid vaadin8

插入新行后是否可以直接对焦并打开网格单元格编辑器?我搜索了一段时间,但没有找到任何帮助。

我用

插入行
grid.setItems(theListWithItems);

插入后编辑器关闭,我必须双击该行进行编辑。 我想在插入新行后立即打开编辑器。

任何帮助都是非常苛刻的。

提前致谢

1 个答案:

答案 0 :(得分:1)

自Vaadin 8.2起,您现在可以在网格编辑器上调用editRow()

grid.getEditor().editRow(theListWithItems.size() -1);

打开新插入项目的编辑器。但是没有关注它,你仍然需要点击(一次,没有双击)你想要编辑的列。

但是,只有通过调用editRow()才能关注该行。为了专注某个专栏我没有找到一个简单的功能,但我找到了一种方法:

每列需要一个已定义的Editor-Component(即TextField)。对于您最初要关注的列,请定义成员字段,以便在添加新项目时可以访问该字段。然后 - 在您致电editRow()后 - 您可以在该编辑器组件上调用focus()

private TextField fooEditorTextField = new TextField();

private createGrid(){
    // create your grid as usual

    // define Editor components for grid
    grid.getEditor().setEnabled(true);
    grid.getColumn("Foo").setEditorComponent(fooEditorTextField );
    grid.getColumn("Bar").setEditorComponent(new TextField());
}

private void addNewItemToGrid(){
    MyItem newItem = new MyItem();
    theListWithItems.add(newItem);
    grid.setItems(theListWithItems);

    // open editor for new Item
    grid.getEditor().editRow(theListWithItems.size() -1);

    // Focus the "Foo" column in the editor of the new item
    fooEditorTextField.focus();
}