總覽
首先需要一個Model類來構建數據結構和方法,然後創建一個Observablelist來與TableView綁定,Observablelist中存儲Model類的對象。
下面是例子:
Model class
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public Person {
public Person(String id, String name){
this.setId(id);
this.setName(name);
}
private StringProperty id; //也可以在這裏直接new
public void setId(String value){ idProperty().set(value);}
public String getId(){ return idProperty().get(); }
public StringProperty idProperty(){
if(id == null) id = new SimpleStringProperty(this, "id");
return id;
}
private StringProperty name;
public void setName(String value){ nameProperty().set(value);}
public String getName(){ return idProperty().get(); }
public StringProperty nameProperty(){
if(name == null) name = new SimpleStringProperty(this, "name");
return name;
}
}
所有屬性使用對應的Property屬性,每個屬性對應三個函數:get(), set(), Property(),其中Property方法用於獲得變量。
除了上面的寫法,也可以聲明變量的時候直接new,這樣Property()方法只需要return。
Controller class
@FXML
private TableView<Person> personTable;
@FXML
private TableColumn<Person, String> idColumn;
@FXML
private TableColumn<Person, String> nameColumn;
//用於保存數據,<>中爲上面Model類的類名
private ObservableList<Person> personData = FXCollections.observableArrayList();
/**
* 在fxml文件完成載入時自動被調用
*/
@FXML
private void initialize(){
idColumn.setCellValueFactory(cellData -> cellData.getValue().idProperty());
nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
//綁定數據到TableView
personTable.setItems(personData);
//添加數據到personData,TableView會自動更新
personData.add(new Person("007", "愛誰誰"));
}