データ構造に値を割り当ててラベルのテキストを変更する必要がある場合は、プログラムの他の部分への変更の通知をサポートするデータ構造が必要です。ObservableList
そのようなデータ構造の1つになります。Label
バインディング API を使用して、 内のテキストをObservableList
のコンテンツにバインドするように変更できます。
ObservableList<Integer> observableList = FXCollections.observableList(Arrays.asList(312, 23, 241));
GridPane gridpane = new GridPane();
gridpane.add(new Label("Item Listing"), 0, 0);
for (int i = 0, size = observableList.size(); i < size; i++) {
Label l = new Label();
// bind text to content at list position
l.textProperty().bind(Bindings.valueAt(observableList, i).asString());
gridpane.add(l, 0, i + 1);
}
ここでバインディングを作成すると、リストの内容が変更された場合に、ラベルの内容が自動的に更新されます。例えば
Scene scene = new Scene(gridpane);
scene.setOnMouseClicked(new EventHandler<MouseEvent>() {
private int index;
@Override
public void handle(MouseEvent event) {
int i = index++ % observableList.size();
observableList.set(i, 10 + observableList.get(i));
}
});
UI に表示される、マウス クリックで値の 1 つを 10 ずつ増やします。