在Jlist

时间:2016-12-20 15:08:21

标签: java swing object jbutton private

我正在尝试设计一个用户界面,允许用户将包含有关人员信息的文件加载到系统中,然后访问有关单个人的信息。 我有一个方法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方法。 任何帮助,将不胜感激 我不确定这是否是一个好方法。如果你有更好的方法来做这个建议,我也很高兴。

1 个答案:

答案 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教程中的部分,了解更多信息和示例。