我有以下代码:
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
。如何获取目标行索引?
答案 0 :(得分:1)
在处理&#34;页面向下的内置事件处理程序之前调用您的事件处理程序。动作。
改为使用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);
}
});