13

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

4 Answers 4

20

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); } }); 
Sign up to request clarification or add additional context in comments.

2 Comments

Works :-) Why the order matter?
This is my assumption, as I haven't done a lot of research on the FX focus model as a whole. It appears that the table row focus is more of a pseudo-focus that is managed by the table. When you request focus for the table after the row, the table acts as though it is defaulting focus which may or may not be on the row you want. Interestingly, I have also had row focus fail if I didn't request focus to the table first. I'm sorry I can't give you a definitive answer.
2

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

Comments

1

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

Comments

0

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

1 Comment

I don't have any custom css. Maybe something else happen after I select a row.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.