2

1列のコレクションをどのように操作する必要がありますか?私が試してみました:

private ObservableList<EmailU> emails= FXCollections.observableList(new ArrayList<EmailU>());

public ObservableList<EmailU> emailsProperty() {
        return emails;
    }

その後

 col_email.setCellValueFactory(
        new PropertyValueFactory<Client, ObservableList<EmailU>>("emails"));
    col_email.setCellFactory(new MultilineTextFieldCellFactory());

ただし、次のエラーが発生します。

SEVERE: javafx.scene.control.Control loadSkinClass Failed to load skin 'StringProperty [bean: TableRow[id=null, styleClass=cell indexed-cell table-row-cell], name: skinClassName, value: com.sun.javafx.scene.control.skin.TableRowSkin]' for control TableRow[id=null, styleClass=cell indexed-cell table-row-cell]
java.lang.RuntimeException: java.lang.ClassCastException: com.sun.javafx.collections.ObservableListWrapper cannot be cast to javafx.beans.property.ReadOnlyProperty*

何か案は?

4

1 に答える 1

2

FooPropertyメソッドは、javafx.beans.property.Propertyの観点からプロパティを返す必要があります。これらのプロパティは、バインディングとTableViewの動作に不可欠な変更について他のエンティティに通知することができます。あなたの場合、それは次のようになりますListProperty

private ListProperty<EmailU> emails = new SimpleListProperty<>(
                       FXCollections.observableList(new ArrayList<EmailU>()));

public ListProperty<EmailU> emailsProperty() {
    return emails;
}

public ObservableList<EmailU> getEmails() {
    return emailsProperty().get();
}

public void setEmails(ObservableList<EmailU> emails) {
    emailsProperty().set(emails);
}

TableViewが正しく機能するためには、ゲッターとセッターを提供する必要があることに注意してください。

于 2012-12-26T21:16:09.097 に答える