I have this common issue, as it appears to be. My table view wont refresh my items after I reset them. I have checked the data and it's the new one.
I tried multiple solution from internet but no success.
Can't reset all the columns because it adds one empty one extra (dont know why) and the resize just breakes.
My table is not editable. The new data is changed.
The data is refreshed if I change the ordering of the items and the rows change (:|).
I'm just left without ideas.
At the moment the refresh code is pretty simple.
ObservableList<User> data = FXCollections.observableArrayList(User.getResellers());
reseller_table.setItems(data);
Again the new data is correct. When I make an selection to the tableView it returns the new correct Item.
Since
JavaFX 8u60
you can use(assumingtableView
is an instance of TableView class):From the documentation:
I have been trying to find a way to refresh the tableView(ScalaFx) for 3-4 hours. Finally I got a answer. I just want to publish my solution because of i wasted already hours.
-To retrieve the rows from database, i used to declare a method which returns ObservableBuffer.
My JDBC CLASS
-And I have created a TableView object.
-And Finally i got solution. In the refresh button, i have inserted this code;
model is the reference of my jdbc connection class
This is the scalafx codes but it gives some idea to javafx
I suppose this thread has a very good description of the problem with table refresh.
Based on Daniel De León's answer
I had a similar problem with refreshing. My solution was to restrict the operations on the
ObservableList
to those which work correctly withbind()
.Assume
ObservableList obsList
is the underlying list for theTableView
.Then
obsList.clear()
(inherited fromjava.util.List<>
) will not update theTableView
correctly but.Also calling
setItem(obsList)
did not work to trigger a refresh...but...obsList.removeAll(obsList)
(overwritten byObservableList
) works fine because it fires the changeEvent correctly.Refilling a list with completely new content then works as follows:
obsList.removeAll(obsList);
obsList.add(...); //e.g. in a loop...
or
obsList.removeAll(obsList);
FXCollections.copy(obsList, someSourceList)
Best regards Ingo
I have an use case where nothing else helped as the solution from Aubin. I adapted the method and changed it by removing and adding an item to the tables' item list as it works in the end only reliable with this hack, the column visible toggle did the job only the first time.
I reported it also in the Jira task: https://javafx-jira.kenai.com/browse/RT-22463