在另一个类</object>的JTextArea中显示ArrayList <object>

时间:2013-07-27 09:25:29

标签: java swing arraylist jtextarea

我花了一整天的时间在网上和这个网站上寻找我的问题的答案,并希望你们能提供帮助。首先,当我选择“报告”ArrayList时,我会尝试将JTextArea的内容显示为JButton。数组列表位于与文本区域分开的另一个类中。我的问题源于这样一个事实:数组列表是一个对象数组,因此当我尝试显示它时,我得到错误:

The method append(String) in the type JTextArea is not applicable 
  for the arguments (ArrayList.Account.TransactionObject>)

我可以在控制台窗口中显示数组列表,但是在文本区域中显示它时却很难过。我假设必须存在将Object转换为String的某种问题,因为我无法将其转换为String或使用数组列表调用toString方法。这是我的代码的相关部分......

这是AccountUI课程中我创建JTextArea

的部分
private JPanel get_ReportPane()
{
    JPanel JP_reportPane = new JPanel(new BorderLayout());
    Border blackline = BorderFactory.createLineBorder(Color.BLACK);
    TitledBorder title = BorderFactory.createTitledBorder(blackline, "Transaction Report");
    title.setTitleJustification(TitledBorder.CENTER);
    JP_reportPane.setBorder(title); 

    /* Create 'labels' grid and JLabels */
    JPanel report_labels = new JPanel(new GridLayout(2, 1, 5, 5));
    report_labels.add(new JLabel("Current Account Balance: ", SwingConstants.RIGHT));
    report_labels.add(new JLabel("Account Creation Date: ", SwingConstants.RIGHT));
    JP_reportPane.add(report_labels, BorderLayout.WEST);

    /* Create 'data' grid and text fields */
    JPanel JP_data = new JPanel(new GridLayout(2, 1, 5, 5));
    JP_data.add(TF_balance2 = new JTextField(10));
    TF_balance2.setBackground(Color.WHITE);
    TF_balance2.setEditable(false);
    JP_data.add(TF_created = new JTextField(10));
    TF_created.setBackground(Color.WHITE);
    TF_created.setEditable(false);
    JP_reportPane.add(JP_data, BorderLayout.CENTER);

    /* Create 'buttons' grid and buttons */
    JPanel JP_buttons = new JPanel(new GridLayout(2, 1, 5, 5));
    JButton JB_report = new JButton("Report");
    JB_report.setBackground(Color.GRAY);
    JB_report.setMargin(new Insets(3, 3, 3, 3));
    JB_report.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            reportAccount();
        }
    }); 


    JP_buttons.add(JB_report);
    JButton JB_close = new JButton("Close");
    JB_close.setBackground(Color.GRAY);
    JB_close.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            System.exit(0);
        }           
    });

    JP_buttons.add(JB_close);   
    JP_reportPane.add(JP_buttons, BorderLayout.EAST);

    /* Create text area and scroll pane */
    reportArea.setBorder(blackline);
    reportArea.setForeground(Color.BLUE);
    reportArea.setLineWrap(true);
    reportArea.setWrapStyleWord(true);
    JScrollPane scrollPane = new JScrollPane(reportArea);
    reportArea.setEditable(false);

    JP_reportPane.add(scrollPane, BorderLayout.SOUTH);

    return JP_reportPane;
}

这是方法(从上面显示的JB_reportAction侦听器类调用),我尝试在文本区域中显示数组列表(也在AccountUI类中):

/**
 * Method used to display account transaction history in the text field.
 */
protected void reportAccount()
{
    reportArea.append(A.getTransactions());
}

这是Account类中的方法,我能够在控制台输出中显示Array内容,但是无法弄清楚如何将Array内容作为String传递给AccountUI类显示在文本区域:

public ArrayList<TransactionObject> getTransactions() 
{
    for (int i = 0; i < transactionList.size(); i++)
    {
        System.out.println(transactionList.get(i));
        System.out.println("\n");
    }
    return transactionList;
}

我希望我在不混淆任何人的情况下澄清了我的问题。任何见解都会非常感激。

3 个答案:

答案 0 :(得分:6)

在列表中拨打toString()

reportArea.append(A.getTransactions().toString());

或者,如果要以不同的格式显示列表的元素,请遍历元素:

for (TransactionObject transaction : A.getTransactions()) {
    reportArea.append(transaction.toString());
    reportArea.append("\n");
}

循环和类型是编程的重要部分。如果您不了解循环和类型,则不应使用Swing。

另外,请尊重Java命名约定。变量以小写字母开头,不包含下划线。他们是camelCased。

答案 1 :(得分:0)

如果您想将ArrayList中的对象内容追加到JTextArea,可以使用此功能:

for (Object obj : arrayList) {
  textArea.append(obj.toString() + "");
}

答案 2 :(得分:0)

您必须为TransactionObject实现并覆盖toString。