在 JScrollPane 中显示对象成员

Show object members inside JScrollPane

我有一个使用默认列表模型的对象列表,如下所示:

public static DefaultListModel<Loan> loans = new DefaultListModel<Loan>();

我的 Swing 应用程序如下所示:

单击“添加”按钮时,它会创建一个 Loan 对象并将该对象添加到 DefaultListModel,如下所示:

addLoan.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        Loan loan = Calculator.createLoan(
                Double.parseDouble(loanAmount.getText()),
                Double.parseDouble(interestRate.getText()),
                Double.parseDouble(term.getText())
        );

        Calculator.addALoan(loan); 
    }
});

现在使用我的代码,对象实际上出现在 JScrollPane 中。您可以在下面看到:

JList loanList = new JList(Calculator.loans);
loans = new javax.swing.JScrollPane(loanList);

以上代码发生在我的init方法中。这是我在前端看到的:

我想将其标记出来并显示该框(滚动窗格)内的每个成员。一个贷款对象由金额、利率和期限组成。我尝试了类似于 (How to dd an object to the JList and show member of the object on the list interface to the user?) 的方法,但我对接受的答案中的渲染器如何显示感到困惑。

您看到的是 Swing 的默认行为的结果。 Swing 正在对每个 Loan 对象调用 toString()

您可以将该方法重写为 return 适合显示的内容:

public class Loan {
    // (property methods)

    @Override
    public String toString() {
        return String.format("%12s    %6s    %,.1f years",
            NumberFormat.getCurrencyInstance().format(
                getAmount()),
            NumberFormat.getPercentInstance().format(
                getInterestRate() / 100),
            getTerm());
    }
}

由于 JList 在大多数平台上使用比例宽度字体,贷款对象的值可能不会相互对齐。要解决这个问题,请删除您的 JList,删除您的列表模型,然后将 AbstractTableModel 子类化并按照 camickr 的建议使用 JTable。