在我发现的 JavaFX 的每个示例中,都有 TableView
(TableColumn
上有 setCellValueFactory
,TableView
上有 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/