1

私が JavaFX で見つけたすべての例には、TableView( setCellValueFactoryonTableColumnsetItemsonを使用してTableView) があります。

単一の観測可能なオブジェクトを実行するにはどうすればよいですか?

たとえば、次の fxml があるとします (値はサードパーティのコントローラーによって変更されます)。

<fx:root type="GridPane" xmlns:fx="http://javafx.com/fxml" fx:controller="AStringAndAnIntController">
    <Label text="random string" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
    <Label fx:id="str" GridPane.columnIndex="0" GridPane.rowIndex="1"/>
    <Label text="random int" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
    <Label fx:id="integer" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
</fx:root>

およびモデル オブジェクト:

public class AStringAndAnInt{
    private String str;
    private int integer;
    //with its setters and getters
}

オブジェクトを JavaFX コントロールにリンクするには、コントローラーで何をする必要がありますか?

public class AStringAndAnIntController extends GridPane implements Initializable{
    @FXML Label str;
    @FXML Label integer;

    @Override public void initialize(URL arg0, ResourceBundle arg1){
    }
    public void setAStringAndAnInt(AStringAndAnInt strint){
        //what would go inside? a ObserbableList.add(strint)?
    }
}
4

1 に答える 1

1

観察可能な値を取得するには、 JavaFX プロパティとバインディングを使用する必要があります。

public class AStringAndAnInt{
    private StringProperty str = new SimpleStringProperty();
    private IntegerProperty integer = new SimpleIntegerProperty();

    public String getStr() {
        return str.getValue();
    }

    public void setStr(String value) {
        str.set(value);
    }

    public StringProperty strProperty() {
        return str;
    }

    public int getInteger() {
        return integer.getValue();
    }

    public void setInteger(int value) {
        integer.set(value);
    }

    public IntegerProperty integerProperty() {
        return integer;
    }
}    

したがって、コントローラーで次のように記述できます。

public class AStringAndAnIntController extends GridPane implements Initializable{
    @FXML Label str;
    @FXML Label integer;

    @Override public void initialize(URL arg0, ResourceBundle arg1){
    }
    public void setAStringAndAnInt(AStringAndAnInt strint){
        str.textProperty().bind(strint.strProperty());
        integer.textProperty().bind(strint.integerProperty().asString());
    }
}
于 2013-02-27T11:44:12.877 に答える