JavaFX TreeTableView:如何在不使用鼠标单击调用setOnEditCommit方法后编辑下一行?

时间:2018-04-13 02:54:22

标签: javafx focus row edit treetableview

这是我第一次创建主题。

我有一个 TreeTableView ,其中有一些不可编辑的 TreeTableColumn ,这些不是相关的,而且还有一个可编辑的原因。始终需要双击才能开始编辑单元格,或者单击一个和一个ENTER键。由于我的treeTableView可能有很多行,因此只需一只手离开键盘并点击打开单元格即可重新编辑新值。

@FXML
private TreeTableView<CelulaTabelaLoteDigitar> tabela = new TreeTableView<>();

private TreeTableColumn<CelulaTabelaLoteDigitar, String> columnPrecoAtual = new TreeTableColumn<>("PREÇO ATUAL");

所以,我想做像Excel这样的事情。 使用ENTER键提交单元格值后,我想转到下一行同一列,并且无需使用鼠标或箭头即可编辑它。我想只用一个ENTER键来做,但它可以是两次,一次提交,另一次打开单元格开始编辑。

enter image description here

我意识到在提交一个值之后表会失去焦点,所以我将其返回并选择方法 setOnEditCommit 中的下一行。 但问题是该行有其他列,我不知道如何按代码“单击”列,因此按ENTER键打开单元格不起作用,因为未选中该列。

columnPrecoAtual.setOnEditCommit(
        new EventHandler<TreeTableColumn.CellEditEvent<CelulaTabelaLoteDigitar, String>>() {

    @Override
    public void handle(TreeTableColumn.CellEditEvent<CelulaTabelaLoteDigitar, String> event) {

        TreeItem<CelulaTabelaLoteDigitar> rowValue = event.getRowValue();

        // ... code ...

        TreeItem<CelulaTabelaLoteDigitar> nextSibling = rowValue.nextSibling();
        tabela.requestFocus();
        tabela.getSelectionModel().select(nextSibling);

        // something to open the cell in column columnPrecoAtual in the nextSibling row OR
        // something to select the column columnPrecoAtual 

    }
});

简而言之,在提交ENTER键后,如果不使用鼠标或箭头,我想开始编辑下一行。我想开始一个CellEditEvent。

1 个答案:

答案 0 :(得分:0)

我花了很多天寻找答案,但我没有找到类似的问题。我无法相信,经过一个小时后发布问题,我在一些尝试后成功了。这就是我所做的:

tabela.getFocusModel().focus(event.getTreeTablePosition().getRow() + 1, columnPrecoAtual);

有了这个我需要使用两次ENTER键,但解决了我的大部分问题。现在我只需要在编辑行的情况下向下移动滚动条。

编辑:

我说完了,如果我知道唯一需要的是发布问题我会早点完成。我用这个完成了我的问题:

tabela.scrollTo(event.getTreeTablePosition().getRow() + 1);

感谢任何可能给出不同答案的人。 我希望这可以帮助某人。