【发布时间】:2019-08-12 11:45:09
【问题描述】:
问题:
我想使用 TAB 键在 JavaFX 中从一个单元格导航到下一个右侧相邻单元格的 TableView。
注意:TableView 设置为可编辑。并且 CellSelection 也已启用。
tableReceipt.getSelectionModel().setCellSelectionEnabled(true);
KeyPressedEvent的处理貌似不是我的问题,而是请求当前单元格右侧的单个单元格的焦点。
我可以聚焦一个单元格,但是当我按下 TAB 键时,焦点会从表格中移到其他表单元素上。
TableView 包含一些可编辑的 TextFieldTableCell 和一个可编辑的 ComboBoxTableCell。
我没有为可编辑单元格使用自定义类,而是这样的代码:
Callback<TableColumn<Receipt, int>, TableCell<Receipt, int>> tfCallBack = TextFieldTableCell.forTableColumn();
columnAmount.setCellFactory(tfCallBack);
对于具有可编辑 TextField 特性的 TableCell。
我的问题:
如何实施解决方案来解决我的问题?理论上的解决方案也会有所帮助。我已经搜索过这个主题,但只找到了一个使用自定义 EditableCell 类的示例。我想一定有像我这样使用回调方法的解决方案。
解决方法:
tableReceipt.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.TAB) {
tableReceipt.getFocusModel().focusRightCell();
Robot r = new Robot();
r.keyPress(KeyCode.ENTER);
}
}
});
使用此代码,我可以获得当前单元格旁边的右侧单元格的焦点。我需要 ENTER KeyPress 来启用单元格的可编辑模式。但是当我在键盘上按 TAB 时,不会提交新值。例如,我按“2”默认值为“0”,按 TAB 后该值再次为“0”。
问题 2:
如何将上面的代码与 changeListener/onEditCommitListener 结合起来,以便在按 TAB 后将新值存储在单元格中?
谢谢。
【问题讨论】:
-
你考虑过使用
SpreadsheetView吗? -
我会看看那个。感谢您的及时回复。
-
仍然不完全了解您的需求...您能否提供minimal reproducible example 来证明您的要求?
-
SpreadsheetView 似乎对解决这个问题很有用,但我使用的是 Java 12,而 ControlsFX 库目前只支持 Java 直到版本 9。
-
好的,在 ControlsFX 可用的 maven 存储库中还有一个适用于 Java 11 的 RC2,如果 Java 版本 12 和 ControlsFX 存在问题,我可能会将我的应用程序回滚到 Java 11,但我认为它也应该可以工作.我只是在尝试。
标签: javafx tabs navigation tableview focus