我有一个javafx tableview,我正在尝试编写一个keylistener,以便用户可以快速选择行并编辑其内容。
到目前为止,我可以通过按键来对焦桌子,并用数字键按下选择/聚焦一行。然而,我希望用户能够通过行选项卡来选择他想要编辑的单元格。
我的问题是,当我选择一行时按Tab键,它总是从第一行开始选择单元格。
以下是我的主要监听器的代码:
....
else if(code.isDigitKey()){
TableView tv = scene.getSelectedTable();
if(tv != null){
tv.getSelectionModel().select(code.ordinal()-24);
tv.getFocusModel().focus(code.ordinal()-24);
//Something required here to set tab position to start of this row
}else{
System.out.println("null");
}
}
有没有办法设置标签起始位置?
解决方案:
Tab只是转到它知道的下一个JavaFX控件元素。 TableView有焦点,所以当我按Tab键时,它转到下一个控制元素,恰好在表格内。 Tab不会遍历表格单元格。
所以我的工作是在所选行的第一个单元格上调用edit方法:
....
else if(code.isDigitKey()){
TableView tv = scene.getSelectedTable();
if(tv != null){
tv.getSelectionModel().select(code.ordinal()-24);
tv.getFocusModel().focus(code.ordinal()-24);
tv.edit(code.ordinal()-24, ((TableColumn)(tv.getColumns().get(0))));
}else{
System.out.println("null");
}
}
然后在我的CellFactory中为该列(恰好是一个Spinner),我重写startEdit:
@Override
public void startEdit(){
this.spinner.requestFocus();
}
请注意,列和表必须是可编辑的。