JavaFX TableView не обновляется при изменениях в ObservableList - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть табличное представление, которое всегда хорошо заполняется,

Мой главный контроллер:

@Override
    public void initialize(URL location, ResourceBundle resources) {
        TableColumn tblc = new TableColumn("Test");
        tblc.setCellValueFactory(new PropertyValueFactory<Test, Integer>("TestData"));
        tbl1.getColumns().setAll(tblc);
        tbl1.setItems(aHandler.getInstance().getData());
        ...

Мой тестовый класс:

public class Test extends Thread {
    public Integer TestData=1;
    ....

Класс Test1который расширяет класс Test и перезаписывает его запуск:

public class Test1 extends Test {
    @Override
    public void run() {
         Timer timer = new Timer();
         timer.scheduleAtFixedRate(new TimerTask(){
                public void run() {
                    setTestData(getTestData()+1);
                    System.out.println(getTestData());
                }
            }, new Date(), 1000);
...

Мой aHandler:

public class aHandler {
    private ObservableList<Test> TestObservableList = FXCollections.<Test>observableArrayList();

    public ObservableList<Test> getData() {
            return TestObservableList;
        }

Так как tbl1 связан с aHandler.getInstance (). GetData (), первый раз, когда яинициализировать класс, я вижу столбец Test, заполненный значением 1, как TestData = 1;но когда таймер начинает изменять TestData, табличное представление не получает новое назначенное значение.Что я делаю не так?

Я старался изо всех сил, чтобы объяснить проблему, пожалуйста, дайте мне знать, если это все еще неясно, я объясню больше.

РЕДАКТИРОВАТЬ: чтобы лучше объяснить, яхочу автоматически обновлять TableView при каждом изменении значения TestData. Это моя конечная цель.

1 Ответ

0 голосов
/ 24 февраля 2019

Решением было использование TableView.refresh ();в таймере.

 Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                Platform.runLater(() -> {
                    tableView.refresh();
                });
            }
        }, new Date(), 1000);
...