JavaFX:在keypressed事件中获取TableView中的目标行索引

时间:2017-01-06 18:38:35

标签: java javafx

我有以下代码:

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。如何获取目标行索引?

1 个答案:

答案 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);
    }
});