問題 - TreeTableView にリアルタイム データを入力できません。データは外部ソースからのものであり、リアルタイムで TreeTableView に表示する必要があります
以下は、コードの簡潔な部分です。ノードを使用してツリー テーブル ビューを作成できます。テストのために、乱数ジェネレーターを作成し、それをテーブル ツリー ビュー フィールドにバインドしました。これが正しいアプローチかどうかはわかりません。
問題を明確に説明できたことを願っています。ご案内をお待ちしております。
FXML:
<TreeTableColumn fx:id="car" prefWidth="150.0" text="Car" />
<TreeTableColumn fx:id="latest" prefWidth="75.0" text="Latest" />
<TreeTableColumn fx:id="high" prefWidth="75.0" text="High" />
<TreeTableColumn fx:id="low" prefWidth="75.0" text="Low" />
コントローラ:
public void initialize(URL location, ResourceBundle resources) {
// Initialize Table Views
car.setCellValueFactory((CellDataFeatures<TableCarMain, String> p) -> new ReadOnlyStringWrapper(
p.getValue().getValue().getCar()));
latest.setCellValueFactory((CellDataFeatures<TableCarMain, String> p) -> new ReadOnlyStringWrapper(
p.getValue().getValue().getLatest()));
high.setCellValueFactory((CellDataFeatures<TableCarMain, String> p) -> new ReadOnlyStringWrapper(
p.getValue().getValue().getHigh()));
low.setCellValueFactory((CellDataFeatures<TableCarMain, String> p) -> new ReadOnlyStringWrapper(
p.getValue().getValue().getLow()));
// Create Main Nodes
final TreeItem<TableCarMain> root = new TreeItem<>(new TableCarMain("Vehicles"));
final TreeItem<TableCarMain> nodeAuto = new TreeItem<>(new TableCarMain("AutomaticCar"));
final TreeItem<TableCarMain> nodeManual = new TreeItem<>(new TableCarMain("ManualCar"));
//Child Nodes - Getting data from Excel & creating the child nodes
for (List<XSSFCell> line : filteredData) {
if (line.get(3).getStringCellValue().equals("AutomaticCar")) {
nodeAuto.getChildren().add(new TreeItem<>(new TableCarMain(line.get(0).getStringCellValue())));
}
if (line.get(3).getStringCellValue().equals("ManualCar")) {
nodeManual.getChildren().add(new TreeItem<>(new TableCarMain(line.get(0).getStringCellValue())));
}
}
root.setExpanded(true);
root.getChildren().addAll(nodeAuto , nodeManual);
tvTree.setRoot(root);
テスト目的で、FXML にボタンを追加し、以下のコードをリンクして、乱数ジェネレーターを追加して、取得する予定のリアルタイム データをシミュレートしました。アイデアは、乱数が値を生成するため、開始ボタンを押した後、最新の列の値に値が表示されるはずです。今のところ、Latest では機能しないため、High & Low 列に値を渡していません。
@FXML
FloatProperty latestProperty= new SimpleFloatProperty();
FloatProperty externalDataProperty= new SimpleFloatProperty();
private void getData() {
latestProperty.bind(externalDataProperty);
ObservableList<TableTradeMain> lineData = FXCollections.observableArrayList();
for (List<XSSFCell> line : filteredData) {
lineData.add(new TableCarMain(line.get(0).getStringCellValue(), Float.toString(latestProperty.get())));
}
Random randomGenerator = new Random();
for (int idx = 1; idx <= 10; ++idx) {
externalDataProperty.set(randomGenerator.nextFloat());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}