Javafx 无法从字符串转换为ObservalEvalue<;字符串>;

Javafx 无法从字符串转换为ObservalEvalue<;字符串>;,javafx,tableview,tablecolumn,Javafx,Tableview,Tablecolumn,我正在制作一个程序来管理和显示有关机场、航班等的数据。 事实上,我有一个tableView(在javafx中)和几个tableColumns,我想在每个列上显示一些信息(命运、起源、公司等),所以我键入了以下内容: @FXML private TableColumn<Flight, String> destinoCol; @FXML private TableColumn<Flight, String> numCol; @FXML private MenuButton

我正在制作一个程序来管理和显示有关机场、航班等的数据。 事实上,我有一个tableView(在javafx中)和几个tableColumns,我想在每个列上显示一些信息(命运、起源、公司等),所以我键入了以下内容:

@FXML
private TableColumn<Flight, String> destinoCol;

@FXML
private TableColumn<Flight, String> numCol;

@FXML
private MenuButton aeropuerto;

@FXML
private MenuButton tipo;

@FXML
private Button filtrar;

@FXML
private TableColumn<Flight, LocalTime> horaCol;

@FXML
private Button este;

@FXML
private DatePicker fecha;

@FXML
private TableColumn<Flight, String> origenCol;

@FXML
private Label retrasoLabel;

@FXML
private ImageView companiaImg;

@FXML
private VBox detalles;

@FXML
private Button todos;

@FXML
private ImageView avionImg;

@FXML
private Label tipoLabel;

private mainVuelos m;
private List<Airport> aeropuertos;
private Data data;
@FXML
void initialize() {
    data = Data.getInstance();
    aeropuertos = data.getAirportList();
    List<MenuItem> ItemAeropuertos = new LinkedList<MenuItem>();
    for (int i = 0; i < aeropuertos.size(); i++) {
        MenuItem item = new MenuItem(aeropuertos.get(i).getName());
        item.setOnAction((event) -> cambiarAer(event));
        ItemAeropuertos.add(item);
    }
    aeropuerto.getItems().setAll(ItemAeropuertos);
    destinoCol.setCellValueFactory(cellData -> cellData.getValue().getDestiny());
}
但是我真的不知道如何解决它,以便能够显示该列上的命运。

根据,
setCellValueFactory(…)
需要一个
回调
,即一个函数,它以
CellDataFeatures
为参数,并产生一个
可观察值

正如错误消息所说,函数的计算结果为
字符串
cellData.getValue().getDestiny()
),但类型不正确

根据您的实际需求,您有两种选择

您可以动态创建正确类型的内容:最简单的方法是:

这将显示正确的值,但不会很好地“连接”到flight对象的属性。如果表是可编辑的,则编辑不会自动传播回基础对象,并且从其他位置对基础对象所做的更改不会在表中自动更新

如果您需要此功能(无论如何,这可能是一种更好的方法),您应该实现您的模型类
Flight
,以使用:

然后你就可以做了

destinoCol.setCellValueFactory(cellData -> cellData.getValue().destinyProperty());

我想我有点晚了,但这可能会帮助其他人。 你可以让凯德如下

destinoCol.setCellValueFactory(cellData -> cellData.getValue().destinyProperty().asObject());

这段代码将适用于字符串以外的属性,因为我在“LongProperty”中遇到了问题。

我无法编辑flights类,所以我使用了第一个解决方案,它成功了。非常感谢,不客气。如果答案回答了问题,请将其标记为正确。
public class Flight {

    private final StringProperty destiny = new SimpleStringProperty();

    public StringProperty destinyProperty() {
        return destiny ;
    }

    public final String getDestiny() {
        return destinyProperty().get();
    }

    public final void setDestiny(String destiny) {
        destinyProperty().set(destiny);
    }

    // similarly for other properties...
}
destinoCol.setCellValueFactory(cellData -> cellData.getValue().destinyProperty());
destinoCol.setCellValueFactory(cellData -> cellData.getValue().destinyProperty().asObject());