JavaFX 2: How to focus a table row programmaticall

2020-02-26 06:58发布

问题:

I am trying to select/focus a row of a TableView programmatically.

I can select a row, but it is not getting rendered as focused (not highlighted). I have tried many combinations of the code below, but nothing seems to work.

table.getSelectionModel().select(0);
table.focusModelProperty().get().focus(new TablePosition(table, 0, column));
table.requestFocus();

Is it possible to highlight a row programmatically?

I am using JavaFX 2.2.21

回答1:

Try putting your request for table focus first and then wrapping the whole thing in a runLater.

Platform.runLater(new Runnable()
{
    @Override
    public void run()
    {
        table.requestFocus();
        table.getSelectionModel().select(0);
        table.getFocusModel().focus(0);
    }
});


回答2:

I have two components: a ListView and a TableView. When an item in the ListView is clicked, I want the focus and selection to move to the TableView and render the selected component in the TableView. To accomplish this, I did it with:

void listViewClickHandler(MouseEvent e){
    A a = listView.getSelectionModel().getSelectedItem();
    if(a != null){
        // some stuff

        // move focus & selection to TableView
        table.getSelectionModel().clearSelection(); // We don't want repeated selections
        table.requestFocus();                       // Get the focus
        table.getSelectionModel().selectFirst();    // select first item in TableView model
        table.getFocusModel().focus(0);             // set the focus on the first element
        tableClickHandler(null);                    // render the selected item in the TableView
}

void tableClickHandler(MouseEvent e){
    B b = table.getSelectionModel().getSelectedItem();
    render(b);
}


回答3:

table.getSelectionModel().select(0); works for me. Maybe the problem is in your css?



回答4:

table.getFocusModel().focus(0); is not needed, but I would also add scrollTo as well.

Java 8:

Platform.runLater(() ->
  {
      table.requestFocus();
      table.getSelectionModel().select(0);
      table.scrollTo(0);
  });

Java 7:

Platform.runLater(new Runnable()
{
    @Override
    public void run()
    {
        table.requestFocus();
        table.getSelectionModel().select(0);
        table.scrollTo(0);
    }
});