【问题标题】:JavaFX - Load Strings to TableView from ObjectJavaFX - 从对象加载字符串到 TableView
【发布时间】:2016-04-02 15:46:36
【问题描述】:

我有一个问题,我无法从一个对象加载 3 个属性以显示在表格视图上。 我有一个付款对象,它由一个受益人对象(由 3 个字符串组成 - 名称、帐号和代码)、一个金额字符串和一个参考字符串组成。 如果它们都是同一个对象的一部分,我可以查看它们,但是当我将它们拆分时,它不会引起问题并且单元格是空白的。

以下是我的课程和 TableView 截图。

public class Payment {

private Beneficiary beneficiary;
private String amount;
private String reference;

public void setBeneficiary(Beneficiary bene) {
    beneficiary = bene;
}

public Beneficiary getBeneficiary() {
    return beneficiary;
}

public void setAmount(String amt) {
    amount = amt;
}

public String getAmount() {
    return amount;
}

public void setReference(String ref) {
    reference = ref;
}

public String getReference() {
    return reference;
}



@XStreamAlias("beneficiary")
public class Beneficiary {

@XStreamAlias("beneficiaryName")
private String beneficiaryName;
@XStreamAlias("beneficiaryAccountNumber")
private String beneficiaryAccountNumber;
@XStreamAlias("beneficiarySortCode")
private String beneficiarySortCode;

public String getBeneficiaryName() {
    return beneficiaryName;
}

public void setBeneficiaryName(String name) {
    beneficiaryName = name;
}

public String getBeneficiaryAccountNumber() {
    return beneficiaryAccountNumber;
}

public void setBeneficiaryAccountNumber(String accountNumber) {
    beneficiaryAccountNumber = accountNumber;
}

public String getBeneficiarySortCode() {
    return beneficiarySortCode;
}

public void setBeneficiarySortCode(String sortCode) {
    beneficiarySortCode = sortCode;
}



        <TableView fx:id="paymentTable" layoutX="17.0" layoutY="222.0" prefHeight="200.0" prefWidth="812.0">
          <columns>
            <TableColumn fx:id="beneficiaryNameColumn" editable="false" prefWidth="169.0" text="Beneficiary Name">
                <cellValueFactory><PropertyValueFactory property="beneficiaryName" /></cellValueFactory>
            </TableColumn>
            <TableColumn fx:id="beneficiaryAccountNumberColumn" prefWidth="177.0" text="Beneficiary Account Number">
                <cellValueFactory><PropertyValueFactory property="beneficiaryAccountNumber" /></cellValueFactory>
            </TableColumn>
            <TableColumn fx:id="beneficiarySortCodeColumn" prefWidth="130.0" text="Beneficiary Sort Code">
                <cellValueFactory><PropertyValueFactory property="beneficiarySortCode" /></cellValueFactory>
            </TableColumn>
            <TableColumn fx:id="amount" prefWidth="147.0" text="Amount">
                <cellValueFactory><PropertyValueFactory property="amount" /></cellValueFactory>
            </TableColumn>
            <TableColumn prefWidth="184.0" text="Payment Reference">
                <cellValueFactory><PropertyValueFactory property="reference" /></cellValueFactory>
            </TableColumn>
          </columns>
        </TableView>

每次我尝试向 tableView 加载付款时,只有金额和参考是可见的。 我尝试使用 PropertyValueFactory 值的各种组合来引用我的受益对象,但没有运气。

enter image description here

【问题讨论】:

    标签: javafx javafx-2 tableview fxml


    【解决方案1】:

    PropertyValueFactory 无法访问“属性的属性”。相反,您必须直接实现setCellValueFactory 所需的Callback。您不能仅在 FXML 中执行此操作,但您可以使用控制器类中的 lambda 表达式轻松提供此实现。

    // controller class referenced by root element of FXML file:
    public class MyController {
    
        public void initialize() {
    
            beneficiaryNameColumn.setCellValueFactory(cellData -> {
                Payment payment = cellData.getValue();
                Beneficiary beneficiary = payment.getBeneficiary();
                return new ReadOnlyStringWrapper(beneficiary.getBeneficiaryName());
            });
    
            // etc
        }
    
    }
    

    或者,更简洁:

    beneficiary.setCellValueFactory(cellData ->
        new ReadOnlyStringWrapper(cellData.getValue().getBeneficiary().getBeneficiaryName()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      相关资源
      最近更新 更多