arraylist - Javafx - 使用数组列表填充表格 View 而不添加新列

标签 arraylist javafx tableview

我目前正在尝试使用数组列表填充 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/

相关文章:

Java ArrayList.contains() 和 add() 方法

Android 弹出窗口使应用程序崩溃

java - java中将扩展抽象类的对象添加到抽象类类型的Arraylist中的方法

java - 我可以在项目的资源文件夹中看到图像,但仍然收到无效网址错误

java - 添加新数据时无法刷新 TableView 单元格

java - 在 Java 中清除列表

JavaFX周期性后台任务

ios - 隐藏表格中选定的单元格 - Swift4

ios - 为什么我的 tableViewController 没有加载任何数据?

css - 单击复选框更改 CodeArea 文本背景