FXML:将TableViews项属性绑定到控制器

时间:2016-11-27 17:10:08

标签: java javafx binding fxml

我在TableView中有FXML,我想将它的项属性绑定到控制器中的列表(就像在WPF中一样),我的{{ 1}}代码是这样的:

FXML

我的控制器如下:

<TableView fx:controller="controllers.MyController"  items="$controller.loggings">
    <columns>
        <TableColumn text="Nom">
            <cellValueFactory>
                <PropertyValueFactory property="name" />
            </cellValueFactory>
        </TableColumn>

        <TableColumn text="Type">
            <cellValueFactory>
                <PropertyValueFactory property="type" />
            </cellValueFactory>
        </TableColumn>
    </columns>
</TableView>

出于某种原因public class MyController { public ObservableList<Logging> loggings = FXCollections.observableArrayList(); @FXML protected void initialize(){ loggings.add(new Logging(){{ setName("hilton"); setType("hotel"); }}); } } 启动。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您尚未声明fx命名空间:

<TableView xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MyController"  items="$controller.loggings">
    ...
</TableView>

此外,控制器类需要包含loggings字段的getter:

private final ObservableList<Logging> loggings = FXCollections.observableArrayList();

public ObservableList<Logging> getLoggings() {
    return loggings;
}

注意: JavaFX不考虑表达式绑定的字段,因此需要getter。

答案 1 :(得分:0)

您的FXML文件错误。您必须将项目分配给控制器类中的TableView

FXML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.cell.PropertyValueFactory?>

<TableView xmlns:fx="http://javafx.com/fxml" fx:controller="controllers.MyController" fx:id="tableView">
    <columns>
        <TableColumn text="Nom">
            <cellValueFactory>
                <PropertyValueFactory property="name" />
            </cellValueFactory>
        </TableColumn>

        <TableColumn text="Type">
            <cellValueFactory>
                <PropertyValueFactory property="type" />
            </cellValueFactory>
        </TableColumn>
    </columns>
</TableView>

控制器:

package controllers;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableView;

public class MyController {
    @FXML
    private TableView<Logging> tableView;

    public ObservableList<Logging> loggings = FXCollections.observableArrayList();

    @FXML
    protected void initialize(){
        loggings.add(new Logging(){{
            setName("hilton");
            setType("hotel");

        }});

        tableView.setItems(loggings);
    }
}