【发布时间】:2014-04-09 09:17:10
【问题描述】:
我想在我的 TableView 中使用自定义控件(代码中的 ClientControl)。因此我创建了一个类ClientCell:
public class NewClientCell extends TableCell<Client, Client> {
private final ClientControl cc;
public NewClientCell(ObservableList<Client> suggestions) {
cc = new ClientControl(this.getItem(), suggestions);
this.setAlignment(Pos.CENTER_LEFT);
this.setGraphic(cc);
this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
@Override
protected void updateItem(Client c, boolean empty) {
super.updateItem(c, empty);
if(!empty){
setGraphic(cc);
}
}
}
在主程序中,我使用以下代码填充表格:
TableColumn<Client, Client> clmClients = new TableColumn<>("Klient");
clmClients.setCellFactory(new Callback<TableColumn<Client, Client>, TableCell<Client, Client>>() {
@Override
public TableCell<Client, Client> call(TableColumn<Client, Client> p) {
return new NewClientCell(suggestions);
};
});
clmClients.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Client, Client>, ObservableValue<Client>>() {
@Override
public ObservableValue<Client> call(TableColumn.CellDataFeatures<Client, Client> p) {
return new SimpleObjectProperty<Client>(p.getValue());
}
});
getColumns().add(clmClients);
表中的数据来自一个 ObservableList 并且初始化正确。
我现在的问题是自定义控件需要一个客户端对象,它应该从 ObservableList 中取出,但是“this.getItem()”总是返回 null。
如何将 Client 对象正确放入自定义控件中?
谢谢!
编辑
ClientControl 的构造函数如下:
public ClientControl(Client client, ObservableList<Client> suggestions) {
setClient(client);
setSuggestions(suggestions);
FXMLLoader loader = new FXMLLoader(getClass().getResource("ClientControl.fxml"));
loader.setRoot(this);
loader.setController(this);
try {
loader.load();
} catch (IOException e) {
throw new RuntimeException(e);
}
initTextField();
setLabelText(client.toString());
}
setClient 方法是一个简单的setter 方法(this.client = client;)。变量客户端和建议的定义很简单:
private ObservableList<Client> suggestions;
private Client client;
【问题讨论】:
标签: java custom-controls tableview javafx-8