这是我第一次创建主题。
我有一个 TreeTableView ,其中有一些不可编辑的 TreeTableColumn ,这些不是相关的,而且还有一个可编辑的原因。始终需要双击才能开始编辑单元格,或者单击一个和一个ENTER键。由于我的treeTableView可能有很多行,因此只需一只手离开键盘并点击打开单元格即可重新编辑新值。
@FXML
private TreeTableView<CelulaTabelaLoteDigitar> tabela = new TreeTableView<>();
private TreeTableColumn<CelulaTabelaLoteDigitar, String> columnPrecoAtual = new TreeTableColumn<>("PREÇO ATUAL");
所以,我想做像Excel这样的事情。 使用ENTER键提交单元格值后,我想转到下一行同一列,并且无需使用鼠标或箭头即可编辑它。我想只用一个ENTER键来做,但它可以是两次,一次提交,另一次打开单元格开始编辑。
我意识到在提交一个值之后表会失去焦点,所以我将其返回并选择方法 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。
答案 0 :(得分:0)
我花了很多天寻找答案,但我没有找到类似的问题。我无法相信,经过一个小时后发布问题,我在一些尝试后成功了。这就是我所做的:
tabela.getFocusModel().focus(event.getTreeTablePosition().getRow() + 1, columnPrecoAtual);
有了这个我需要使用两次ENTER键,但解决了我的大部分问题。现在我只需要在编辑行的情况下向下移动滚动条。
编辑:
我说完了,如果我知道唯一需要的是发布问题我会早点完成。我用这个完成了我的问题:
tabela.scrollTo(event.getTreeTablePosition().getRow() + 1);
感谢任何可能给出不同答案的人。 我希望这可以帮助某人。