15

FXML ファイルの Label と関連するコントローラーの IntegerProperty の間のデータ バインディングを設定しました。問題は、初期化時にラベルが正しい値に設定される一方で、プロパティの値が変更されたときにラベルが更新されないことです。

FXMLファイル

<?xml version="1.0" encoding="UTF-8"?>

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<GridPane xmlns:fx="http://javafx.com/fxml"
   fx:controller="application.PaneController" minWidth="200">
   <Label id="counterLabel" text="${controller.counter}" />
   <Button translateX="50" text="Subtract 1"
      onAction="#handleStartButtonAction" />
</GridPane>

コントローラ

package application;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.beans.binding.Bindings;
import javafx.beans.property.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class PaneController implements Initializable
{
    private IntegerProperty counter;

    public int getCounter()
    {
        return counter.get();
    }

    public void setCounter(int value)
    {
        counter.set(value);
    }

    public PaneController()
    {
        counter = new SimpleIntegerProperty(15);
    }

    @Override
    public void initialize(URL url, ResourceBundle resources)
    {
    }

    @FXML
    private void handleStartButtonAction(ActionEvent event)
    {
        setCounter(getCounter() - 1);
        System.out.println(getCounter());
    }
}

期待

「1 を引く」ボタンを押すたびに、カウンターが 1 減り、counterLabel が自動的に更新されます。

現実

カウンターは 1 減りますが、counterLabel は 15 (初期値) のままです。

質問

私が行ったことはうまくいくはずだという印象を受けました (たとえば、このフォーラムの投稿から)。私は何が欠けていますか?

4

1 に答える 1