我目前正在尝试使用数组列表填充 javafx gui 中的表格 View ,它或多或少可以工作。
这是我的代码:
GUI.xml:
<TableView fx:id="tableBookList">
<columns>
<TableColumn fx:id="columnTitle" text="Title" />
<TableColumn fx:id="columnQuantity" text="Quantity" />
<TableColumn fx:id="columnUUID" text="UUID" />
</columns>
</TableView>
GUIController.java:
public void setTableContent(ArrayList<Book> bookList)
{
columnTitle = new TableColumn<>("columnTitle");
columnQuantity = new TableColumn<>("columnQuantity");
columnUUID = new TableColumn<>("columnUUID");
ObservableList<Book> data = FXCollections.<Book>observableArrayList(new Book("Test", 1));
data.addAll(bookList);
columnTitle.setCellValueFactory(new PropertyValueFactory<Book, String>("title"));
columnQuantity.setCellValueFactory(new PropertyValueFactory<Book, Integer>("quantity"));
columnUUID.setCellValueFactory(new PropertyValueFactory<Book, String>("uuid"));
tableBookList.setItems(data);
// This is working but adding three new columns every time :(
tableBookList.getColumns().addAll(columnTitle, columnQuantity, columnUUID);
tableBookList.refresh();
}
正如您在评论中看到的那样,当前设置正在运行,但每次调用此函数时都会添加三个新列。
我进行了搜索,但找不到可以使用的答案。
我希望有人能告诉我我的问题出在哪里。
提前致谢!
最佳答案
在 Controller 的 initialize
方法或 fxml 中分配 cellValueFactory
,并且不要重新创建列。此外,调用 refresh
是不必要的:
public void setTableContent(ArrayList<Book> bookList) {
ObservableList<Book> data = FXCollections.<Book>observableArrayList(new Book("Test", 1));
data.addAll(bookList);
tableBookList.setItems(data);
}
版本 1:使用 fxml
<TableView fx:id="tableBookList">
<columns>
<TableColumn fx:id="columnTitle" text="Title">
<cellValueFactory>
<PropertyValueFactory property="title"/>
</cellValueFactory>
</TableColumn>
<TableColumn fx:id="columnQuantity" text="Quantity">
<cellValueFactory>
<PropertyValueFactory property="quantity"/>
</cellValueFactory>
</TableColumn>
<TableColumn fx:id="columnUUID" text="UUID">
<cellValueFactory>
<PropertyValueFactory property="uuid"/>
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
版本 2:使用initialize
方法
@FXML
private void initialize() {
columnTitle.setCellValueFactory(new PropertyValueFactory<Book, String>("title"));
columnQuantity.setCellValueFactory(new PropertyValueFactory<Book, Integer>("quantity"));
columnUUID.setCellValueFactory(new PropertyValueFactory<Book, String>("uuid"));
}
关于arraylist - Javafx - 使用数组列表填充表格 View 而不添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504371/