java - 常规变量的 ObservableList 概念(无 TableView)

标签 java javafx-2 fxml

在我发现的 JavaFX 的每个示例中,都有 TableView(TableColumn 上有 setCellValueFactoryTableView 上有 setItems)。

如何创建单个可观察对象?

例如,如果我有以下 fxml(值将由第三方 Controller 更改):

<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
}

我应该在 Controller 中做什么来将我的对象与 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)?
    }
}

最佳答案

您需要使用JavaFX properties and binding具有可观察的值。

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;
    }
}    

所以在你的 Controller 中你可以写:

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());
    }
}

关于java - 常规变量的 ObservableList 概念(无 TableView),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110929/

相关文章:

layout - JavaFX 2.0 : Flowpane should automaticly resize when parental element does

java - 从 java 代码启动 javaFX 应用程序

JavaFX 2.1 TableView 刷新项

java - 如何在未捕获的异常处理程序中重新启动kafka Stream应用程序?

java - 从字符串中提取字符并按类型放入特定数组

java - Android 图表如何删除垂直侧线?尝试了一切

java - 如何知道客户端是否关闭了连接

java - 是否可以在同一框架中打开新的 fxml 文件

java - 使用 FXML TableView 列出文件名 - 无法填充数据

JavaFX:使用 fxml 添加应用程序图标