我花了一整天的时间在网上和这个网站上寻找我的问题的答案,并希望你们能提供帮助。首先,当我选择“报告”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;
}
我希望我在不混淆任何人的情况下澄清了我的问题。任何见解都会非常感激。
答案 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。