JavaFX Dynamic TableView с URL json - PullRequest
       5

JavaFX Dynamic TableView с URL json

0 голосов
/ 30 августа 2018

Я хочу создать динамическое табличное представление, которое получает свои данные от json, предоставленного веб-страницей. Дело в том, что всякий раз, когда данные из json находятся вне диапазона (например, диапазон должен быть 0,8-0,9, но он читает 1.1), таблица автоматически обновляет список наблюдаемых с помощью изображения "КРАСНЫЙ КВАДРАТ". Если данные находятся в пределах досягаемости, отображается изображение «СИНИЙ КВАДРАТ». Это похоже на индикатор состояния, так что пользователь знает, правильные данные или нет. У меня есть этот код:

public ObservableList<PumpSites> list = FXCollections.observableArrayList(
        new PumpSites (blue or red square image, "Canduman"),
        new PumpSites (blue or red square image, "Cubacub"),
        new PumpSites (blue or red square image, "Liloan"),
        new PumpSites (blue or red square image, "Talamban"),
        new PumpSites (blue or red square image, "Tisa")
        );

status.setCellValueFactory(new PropertyValueFactory<PumpSites, String>("status"));
ps.setCellValueFactory(new PropertyValueFactory<PumpSites, String>("ps"));
table.setItems(list);

public class PumpSites {
private final SimpleStringProperty status;
private final SimpleStringProperty ps;

public PumpSites(String status, String ps){
    super();
    this.status = new SimpleStringProperty(status);
    this.ps = new SimpleStringProperty(ps);
}

public String getStatus() {
    return status.get();
}

public String getPs() {
    return ps.get();
}

}

У меня нет проблем с получением данных от json. Я планирую поместить динамическое чтение данных для индикатора состояния в platform.runlater, чтобы он всегда обновлялся. Как динамически показать синий или красный квадрат рядом с участком насоса в таблице?

1 Ответ

0 голосов
/ 30 августа 2018

Вот некоторые идеи и примеры кода:

(1) Отображение состояния (да или нет) для ячейки столбца табличного представления - пример кода:

DataClass может иметь свойство boolean, определенное следующим образом:

private SimpleBooleanProperty status;

Ячейка табличного представления может быть отображена с помощью флажка, используя значения логических свойств состояния. Вот код, как может быть определен столбец табличного представления:

TableColumn<DataClass, Boolean> statusCol = new TableColumn<>("Status");
statusCol.setCellValueFactory(new PropertyValueFactory<DataClass, Boolean>("priority"));
statusCol.setCellFactory(column -> {
    CheckBoxTableCell<DataClass, Boolean> cell = new CheckBoxTableCell<>();
    cell.setAlignment(Pos.CENTER);
    return cell;
});

Как я уже предлагал, вместо флажка можно отобразить цветное поле (используя класс формы, например Rectangle из пакета javafx.scene.shape).

(2) Классы java.util.Timer и TimerTask могут использоваться для периодического планирования и запуска задачи. В основном приложении после создания графического интерфейса таймер можно инициализировать следующим образом:

public class BuildMyAppGui {
    //...
    private void initiateTimer() {

            Timer timer = new Timer();
            long zeroDelay = 0L;
            long period = 60000L; // 60 * 1000 = 1 min

            // The timer runs once the first time
            // and subsequently the scheduled task every one minute
            timer.schedule(new DataChangedTask(), zeroDelay, period);
    }
    //...
}

Пример кода класса задач таймера:

public class DataChangedTask extends TimerTask {

    @Override
    public void run() {
        // Code checks if there is a data change and refreshes the table data.
        // This also refreshes the table column with check box -
        // as checked or un-checked depending on the true/false value
        // in the boolean property in DataClass.
    }
}

Обратите внимание, что класс DataChangedTask может иметь конструкторы, которые принимают ссылки на данные и получают доступ к другим ссылкам, как того требует приложение.

...