ArrayList to JList - 多个对象元素
我正在使用Eclipse,使用Java进行编程。问题:ArrayList to JList - 多个对象元素
这是我要显示我的JList:
1 - Dante
2 - William
3 - Jaime
etc...
现在,数字对象的ID和名称,以及,名称。
ArrayList被命名为TraitList。
这是我所得到的,当我把那个作为“模式”在JList中从窗口生成器在Eclipse属性:
TraitL.setModel(new AbstractListModel() {
String [] values = new String[] {"1 - Dante", "2 - William", "3 - Jaime"};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
因此,我改变它:
TraitL.setModel(new AbstractListModel() {
String [] values = new String [];
for (int jln = 0; jln < TraitList.size(); jln++){
values [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
}
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
它没有工作。我已经尝试了几十个变种。没有工作。那么,如何让这个列表显示一个对象的多个元素?我不在乎它是否是DefaultListModel或AbstractListModel,或者甚至是ListModel。 在此先感谢。
奖金的问题: 如何让我点击此列表中的元素的“的actionPerformed”,所以有事点击后?
new AbstractListModel() {
String [] values = new String [];
for (int jln = 0; jln < TraitList.size(); jln++){
values [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
}
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
}
这是一个无效的匿名类定义,你有代码在类体中浮动。
它可以由被固定或者在初始化移动到私人方法:
String [] values = initTraitList();
private String[] initTraitList() {
String [] values = new String [TraitList.size()];
for (int jln = 0; jln < TraitList.size(); jln++){
values [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
}
return values;
}
,或者通过使用实例初始化块:
String [] values = new String [TraitList.size()];
{
for (int jln = 0; jln < TraitList.size(); jln++){
values [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
}
}
我觉得行
String [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
应该
values[jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
吧?
感谢Guilherme,感谢您的回应! 我试过了,并且还标记为大卫华莱士问的错误。它在编辑问题的图像中。 – Werneck
欢迎光临! (: –
应该没有必要将您的列表复制到局部变量。你可以,如果你愿意,但没有必要。这里是直接在模型中访问原始列表的一个例子:
public static void main(String[] args) {
List<String> values = Arrays.asList("A", "B", "C");
JList list = new JList(new AbstractListModel() {
public int getSize() {
return values.size();
}
public Object getElementAt(int index) {
return index + " - " + values.get(index);
}
});
list.addListSelectionListener(e ->
System.out.println("Clicked " + list.getSelectedValue()));
JFrame frame = new JFrame("List Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(list);
frame.pack();
frame.setVisible(true);
}
如果你特别想它嵌入在价值指数模型里的数组,然后:
String[] valueCopy = IntStream.range(0, values.size())
.mapToObj(i -> i + " - " + values.get(i))
.toArray(new String[0]);
public int getSize() {
return valueCopy.length;
}
public Object getElementAt(int index) {
return valueCopy[index];
}
感谢您的回答,短跑运动员。 我标记Kiskae的答案是最有帮助的,因为它对我来说更简单,但它也有很多答案,因为它给了我单击列表元素后的一个操作示例 非常感谢! – Werneck
它可以不使用模型来实现:
String [] values = new String[] {"1 - Dante", "2 - William", "3 - Jaime"};
JList jlist = new JList(values);
scrollpane = new JScrollPane(jlist);
scrollpane.setViewportView(jlist);
“1 - Dante 2 - William 3 - Jaime” “仅仅是我希望显示的一个例子。另外我做了这个,看看Window Builder如何创建JList。 另外,创建JList时默认最后两行。 – Werneck
如果你真的说出了什么错误,这个问题会更容易回答。无论如何,问题的一个可能的来源(除Guilherme的答案中提到的错误之外)是'id'和'Name'是否是TraitList列表中类的公共字段。如果他们不是,那么你可能需要使用他们的获得者来检索他们。如果他们是,你应该阅读封装。 –
Guilherme对这个问题的建议添加了错误作为图像的错误。 此外,我还没有给出Trait类中字段的公共或私有分类,所以我猜它们是公开的。我会读封装。很久以前就读过,不记得清楚。 – Werneck