当前位置: 首页 > 知识库问答 >
问题:

JavaFX-将字符串从Object加载到TableView

汪信鸥
2023-03-14

我有一个问题,我不能从一个对象加载3个属性显示在表视图上。我有一个付款对象,它由一个受益人对象(包括3个字符串-name、accountnumber和code)、一个金额字符串和一个引用字符串组成。如果这些项目都是同一个对象的一部分,我可以查看它们,但是当我将它们拆分时,它不会引起问题,并且单元格是空的。

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值的各种组合来引用我的受益对象,但没有成功。

在此输入图像说明

共有1个答案

印曜灿
2023-03-14

PropertyValueFactory无法访问“属性的属性”。相反,您必须直接实现SetCellValueFactory所需的回调。您不能仅在FXML中完成此操作,但可以使用controller类中的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()));
 类似资料:
  • 问题内容: 相反,如果不从文件加载xml,如何从字符串加载呢? 问题答案: 您的XML字符串在哪里。有关更多信息,请参见MSDN文章。

  • 在阅读了关于StackOverflow的几个答案之后。我试图实现推荐的方式,但我仍然没有在我的中获得字符串列表。

  • 是否可以从base64字符串创建QIcon? 我看到我们可以将base64字符串加载到QByteArray中。我看到我们可以从QPixMap创建一个QIcon。 我尝试了以下方法: 什么都没显示出来。 PS:这里可以试试base64图像。

  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 我在Java程序中有两个字符串,我想以某种方式混合以形成两个新字符串。为此,我必须从每个字符串中提取一些构成字符并将其添加以形成新的字符串。我有这样的代码(this.eka和this.toka是原始字符串): 我正在获取.charAt(x)部分的数字,那么如何将字符转换为字符串? 问题答案: 只使用永远使用代替 例如,当位置arent不是固定值而变量 其中x,y,z是保存从中提取位置的

  • 问题内容: 我通过ajax将图像作为base64字符串发送到django。在我的django视图中,我需要调整图像大小并将其保存在文件系统中。 这是一个base64字符串(简体): 我尝试使用以下python代码在PIL中打开此文件: 我正在尝试将上传的图像显示回去,但是firefox抱怨说 我不知道我的错误。 解: 问题答案: 解: 将打开的PIL图像保存到类似文件的对象即可解决此问题。