我有一个对象 - 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中,这样我才能拥有上述功能呢?
答案 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的文档。它有一个示例,说明如何构建自定义单元格渲染器,以按照您希望它们显示的方式显示列表中的项目。这很容易理解。它还有一个如何创建鼠标单击侦听器的示例。您应该能够复制/粘贴大部分内容。
答案 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)