我有以下代码:
public class JavaFxApplication extends Application{
public class Article{
private ObjectProperty<Integer> id;
private StringProperty title;
public Article(ObjectProperty<Integer> id, StringProperty title) {
this.id = id;
this.title = title;
}
public ObjectProperty<Integer> getId() {
return id;
}
public StringProperty getTitle() {
return title;
}
}
@Override
public void start(Stage stage) throws Exception {
ObservableList<Article> articles=FXCollections.observableArrayList();
for (int i=0;i<200;i++){
articles.add(new Article(new SimpleObjectProperty<Integer>(i), new SimpleStringProperty("title_"+i)));
}
TableView<Article> tableView=new TableView(articles);
TableColumn<Article,Integer> idColumn=new TableColumn("ID");
idColumn.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
idColumn.setCellValueFactory(data->data.getValue().getId());
tableView.getColumns().add(idColumn);
TableColumn<Article,String> titleColumn=new TableColumn("Title");
titleColumn.setCellValueFactory(data->data.getValue().getTitle());
tableView.getColumns().add(titleColumn);
tableView.setOnKeyPressed((KeyEvent t)-> {
KeyCode key=t.getCode();
if (key==KeyCode.PAGE_DOWN){
int pos=tableView.getSelectionModel().getSelectedIndex();
System.out.println("INDEX:"+pos);
}
});
VBox vbox=new VBox();
vbox.getChildren().add(tableView);
Scene scene=new Scene(vbox, 200, 400);
stage.setScene(scene);
stage.show();
}
}
运行此应用程序后,我选择第一行(id=0)并按向下翻页键。我想获取焦点到达的行的索引,而不是焦点离开的行的索引。但在我的示例中,应用程序输出是 INDEX:0
。如何获取目标行索引?
最佳答案
您的事件处理程序在处理“向下翻页”操作的内置事件处理程序之前被调用。
改用 KEY_RELEASED
处理程序:
tableView.setOnKeyReleased((KeyEvent t)-> {
KeyCode key=t.getCode();
if (key==KeyCode.PAGE_DOWN){
int pos=tableView.getSelectionModel().getSelectedIndex();
System.out.println("INDEX:"+pos);
}
});
关于JavaFX:在按键事件上获取 TableView 中的目标行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512146/