6

我想尽可能简短而不省略有用的信息。我有以下课程:

public class Address{
StringProperty city = new SimpleStringProperty();
StringProperty street = new SimpleStringProperty();

//following the constructor, getters and setters
...
}

我有另一个班级客户,那个有一个地址成员

public class Client {

StringProperty name = new SimpleStringProperty();
StringProperty  id = new SimpleStringProperty();
ObjectProperty<Address> address = new SimpleObjectProperty<>();

//following the constructor, getters and setters
...
}

和一个带有控制器的 JavaFX 接口,该控制器包含一个 TableView 对象,该对象应在 3 列中输出给定对象的 Client 类的成员和 Address 类的 city 成员。我的 TableView 和 TableColumn 定义如下代码

public class SettingsController {
TableColumn<Client, String> clientNameCol;
TableColumn<Client, String> clientEmailCol;
TableColumn<Client, String> clientCityCol;
private TableView<Client> clientSettingsTableView;
...
...
    clientNameCol = new TableColumn<>("Name");
    clientNameCol.setCellValueFactory(new PropertyValueFactory<Client, String>("name"));

    clientEmailCol = new TableColumn<>("email");
    clientEmailCol.setCellValueFactory(new PropertyValueFactory<Client, String>("email"));

    clientCityCol = new TableColumn<>("City");
    clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, String>("city"));

    clientSettingsTableView.setItems(clientData);
    clientSettingsTableView.getColumns().clear();
    clientSettingsTableView.getColumns().addAll(clientNameCol, clientEmailCol, clientCityCol);

当然还有一个 ObservableList clientData 包含一个 Client 对象数组。一切正常,除了应该为每个客户输出城市的列。我应该如何定义客户对象的城市列(由地址成员包含)?

4

3 回答 3

7

@invariant 感谢您的帮助,我用谷歌搜索了更多,最终得到了以下解决方案:

clientCityCol = new TableColumn<>("City");
clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, Address>("address"));
// ======== setting the cell factory for the city column  
clientCityCol.setCellFactory(new Callback<TableColumn<Client, Address>, TableCell<Client, Address>>(){

        @Override
        public TableCell<Client, Address> call(TableColumn<Client, Address> param) {

            TableCell<Client, Address> cityCell = new TableCell<Client, Address>(){

                @Override
                protected void updateItem(Address item, boolean empty) {
                    if (item != null) {
                        Label cityLabel = new Label(item.getCity());
                        setGraphic(cityLabel);
                    }
                }                    
            };               

            return cityCell;                
        }

    });

Address 类有一个 getter getCity(),它将城市成员作为 String() 返回。

于 2013-03-11T18:22:19.357 回答
0

这适用于 fxml?

考虑以下代码:

<TableColumn prefWidth="8" text="City"> <cellValueFactory > <PropertyValueFactory property="adress.city" /> </cellValueFactory> </TableColumn>

以这种方式工作我有一个空白单元格。

于 2014-04-16T13:18:22.633 回答
0

您忘了提及您必须将 clientCityCol 的定义更改TableColumn<Client, String> clientCityCol;为,TableColumn<Client, Address> clientCityCol;否则它将无法正常工作。

于 2016-10-27T03:23:07.463 回答