使用JList和ArrayList的Java Swing <>
基本上,我有一个保存CD ArrayList实例的CD库,然后我有一个可以“借用”CD的人ArrayList < ...从该CD中添加到可用或不可用的列表中。使用JList和ArrayList的Java Swing <>
public CDStore(String storeNme) {
storeName = storeNme;
discsArray = new ArrayList<CD>();
peopleArray = new ArrayList<Person>();
}
通过使用JList,我试图使列表的元素等于CD的实例。
所以...物品1在列表中会在索引0的CD,项目2 =索引1等等....
String[] entries = ??????????????????;
JList listOfCD = new JList(entries);
listOfCD.setVisibleRowCount(4);
JScrollPane listPane = new JScrollPane(listOfCD);
JTextField valueField = new JTextField("None", 7);
三江源。
您的CDStore
可以实现接口ListModel
。比你可以使用CDStore
作为你的JList
的模型。
CDStore store = new CDStore("Store");
// add some CDs
JList listOfCD = new JList(store);
listOfCD.setVisibleRowCount(4);
JScrollPane listPane = new JScrollPane(listOfCD);
JTextField valueField = new JTextField("None", 7);
这里是CDStore implements ListModel
的示例实现。每次更改discsArray
时,应该调用方法fireContentsChanged
。
public class CDStore implements ListModel {
private String storeName;
private List<CD> discsArray;
private List<Person> peopleArray;
public CDStore(String storeNme) {
storeName = storeNme;
discsArray = new ArrayList<CD>();
peopleArray = new ArrayList<Person>();
}
//your methods
//ListModel
private List<ListDataListener> listener = new ArrayList<ListDataListener>();
public void addListDataListener(ListDataListener l) {
listener.add(l);
}
public void removeListDataListener(ListDataListener l) {
listener.remove(l);
}
protected void fireContentsChanged() {
for (ListDataListener l : listener) {
l.contentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, discsArray.size()-1));
}
}
public Object getElementAt(int index) {
return discsArray.get(index);
}
public int getSize() {
return discsArray.size()
}
}
+1另外考虑扩展'AbstractListModel'以利用某些方法的现有实现。 – trashgod 2012-03-07 17:12:29
如果您需要检索CD名称的方法,让我们叫它getCDName(), 你可以尝试
String[] entries = new String[discsArray.length];
int index = 0;
for (CD cd: discsArray) {
entries[index++] = cd.getCDName();
}
这在你的输入数组应填写。
尝试了你说的,但我们从另一个类别调用disksArray ...但无论什么原因,它不会允许我使用disksArray并询问我创造的方法等有无论如何解决这个问题? – 2012-03-07 16:19:15
你只是试图获取列表中显示的CD的名称? – bvulaj 2012-03-07 16:25:13
基本上,是的...只是想要discArray的元素是元素条目 – 2012-03-07 16:50:26