我使用Eclipse,用Java编程。问题:
这就是我想要显示JList的方式:
1 - Dante
2 - William
3 - Jaime
etc...
现在,数字是对象的ID,名称也就是名称。
ArrayList被命名为TraitList。
这就是我把它作为"模型" Eclipse中Window Builder的JList中的属性:
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。 提前谢谢。
奖金问题: 如何在此列表的元素中单击&#34; actionPerformed&#34;所以点击它后发生了什么事?
答案 0 :(得分:0)
我认为该行
String [jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
应该是
values[jln] = (TraitList.get(jln).id + " - " + TraitList.get(jln).Name);
正确?
答案 1 :(得分:0)
不需要将列表复制到本地变量。如果你愿意,你可以,但没有必要。以下是直接在模型中访问原始列表的示例:
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];
}
答案 2 :(得分:0)
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);
}
}
答案 3 :(得分:0)
没有模型就可以实现:
String [] values = new String[] {"1 - Dante", "2 - William", "3 - Jaime"};
JList jlist = new JList(values);
scrollpane = new JScrollPane(jlist);
scrollpane.setViewportView(jlist);