将对象添加到JList

时间:2012-03-01 01:03:52

标签: java swing jlist

我有一个对象 - ArrayList<User> users,其中包含一些用户对象。

public class User
{
    int id;
    String name;
    String location;
}

我想将此ArrayList放在JList中,以便显示用户名 -

John
Mick
Sam
Joe

---当我选择一个用户名时,会触发一个事件,让我使用相应的User对象执行某些操作。所以有人点击'Mick',我得到这样的代码(伪代码) -

public jListClicked(User user)
{
    int id = user.id;
    String name = user.name;
    String location = user.location;

    updateDatabase(id, name, location);
}

我认为这可以使用JList吗?毕竟我想象这就是为JList组件创建的。那么如何将一个像ArrayList这样的对象添加到JList中,这样我才能拥有上述功能呢?

2 个答案:

答案 0 :(得分:4)

JList接受一个构造函数Object []。您可以使用.toArray()函数从ArrayList中获取此信息。我相信(我可能错了......)如果您的User类重写toString()方法,JList将在显示您的对象时使用它。

public class User
{
    int id;
    String name;
    String location;

    public String toString() {
      return name;
    }
}

我建议在java文档中阅读JList的文档。它有一个示例,说明如何构建自定义单元格渲染器,以按照您希望它们显示的方式显示列表中的项目。这很容易理解。它还有一个如何创建鼠标单击侦听器的示例。您应该能够复制/粘贴大部分内容。

http://docs.oracle.com/javase/6/docs/api/

答案 1 :(得分:1)

我们关心这个案例的JList构造函数需要一个Object数组,正如Tony已经指出的那样。这就是他的答案停止有用的地方(没有冒犯Tony)。

默认情况下,JList使用的ListCellRenderer添加包含Object#toString()文本的JLabel。因此,您不想传递字符串,而是要传递一个用户对象数组,然后添加一个ListSelectionListener(在用户点击JList后使用)和一个ListCellRenderer(确定如何将User对象转换为JComponent)它将作为JList的一部分绘制。)

你想做这样的事情(详见内联评论):

import numpy as np
import pandas as pd

np.random.seed(2015)
N = 10000
df = pd.DataFrame(np.random.randint(10, size=(N,3)), columns=['Group', 'A', 'W'])
result =  df.groupby(['Group']).apply(lambda x: np.average(x['A'], weights=x['W']))
print(result)