我正在尝试设计一个用户界面,允许用户将包含有关人员信息的文件加载到系统中,然后访问有关单个人的信息。 我有一个方法getpersons从ArrayList获取信息并创建一个对象PersonList。通过从.txt文件中读取有关人员的信息来生成ArrayList。 PersonList再次包含单个Person对象。 现在我创建了一个JButton,在EventListener方法中我调用了第一个方法。 所以基本上点击按钮我的程序读取文件并创建一个对象PersonList。 然后我想遍历PersonList对象并将人物对象添加到jlist。单击J列表中的对象后,我想在JTextArea中显示person对象中包含的信息。现在我的第一个想法是将person对象直接传递给Jlist。但我不知道如何让我的JList接受我的特定人物对象。
人类看起来有点像这样:
public class Person
{
private String personname;
private String personage;
private String personaddress;
.....
}
我的JButton代码就像这样
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ArrayList<String> personlist = readFile("data/persons.txt");
PersonList persons = getpersons(personlist);
for(int i = 0; i < persons.getsize(); i++)
{
JList.addItem(persons.getperson(i));
}
}
另一个想法是简单地显示Jlist中字符串的人名。然后,我将用户在Jlist中单击的名称与PersonList对象中的人员进行比较,并在文本区域中显示相应人员的信息。但这需要我从私有的jButton1ActionPerformed方法中获取PersonList对象(并且不能更改为public)并将其传递给JListActionPerformed方法。 任何帮助,将不胜感激 我不确定这是否是一个好方法。如果你有更好的方法来做这个建议,我也很高兴。
答案 0 :(得分:2)
然后我想循环遍历PersonList对象并将人物对象添加到jlist。
您只需在Person
中显示JTable
对象即可。然后,您可以在不同的列中显示有关Person
的所有信息。您需要为此创建一个自定义TableModel。
查看Table Row Model以获取如何完成此操作的示例。
但我不知道如何让我的JList接受我的特定人物对象。
您可以将任何对象添加到ListModel
使用的JList
,因此您将Person
对象添加到JList
的方式与添加{{1}的方式相同到String
。
JList
使用渲染器在列表中显示对象。默认渲染器只调用对象的JList
方法以获取要显示的文本。因此,一个简单的解决方案是在toString()
对象中实现toString()
方法,以返回要在列表中显示的Person
。
然而,使用toString()方法来包含应用程序使用的数据并不是一个好主意,因此更好的解决方案是创建一个自定义渲染器来显示数据。
阅读Writing a Custom Renderer上Swing教程中的部分,了解更多信息和示例。