java java将数组刷新到jList中
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3268383/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java refreshing an array into jList
提问by test
OK so I have a JList and the content is provided with an array. I know how to add elements to an array but I want to know how to refresh a JList... or is it even possible? I tried Google. :\
好的,所以我有一个 JList 并且内容提供了一个数组。我知道如何向数组添加元素,但我想知道如何刷新 JList ......或者甚至可能吗?我试过谷歌。:\
import java.applet.Applet;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class bs extends JApplet implements MouseListener {
public static String newline;
public static JList list;
public void init() {
String[] data = {"one", "two", "three", "four"};
list = new JList(data);
this.getContentPane().add(list);
list.addMouseListener(this);
String newline = "\n";
list.setVisible(true);
}
public void refresh(){
Address found;
this.listModel.clear();
int numItems = this.getAddressBookSize();
String[] a = new String[numItems];
for (int i=0;i<numItems;i++){
found = (Address)Addresses.get(i);
a[i] = found.getName();
}
/* attempt to sort the array */
Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);
for (int i=0;i<numItems;i++) {
this.listModel.addElement(a[i]);
}
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) {
Object index = list.getSelectedValue();
System.out.println("You clicked on: " + index);
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void paint(Graphics g) {
}
}
Any ideas?
有任何想法吗?
Thank you.
谢谢你。
回答by mikera
One good approach is to create a ListModel to manage the data for you and handle updates.
一种好的方法是创建一个 ListModel 来为您管理数据并处理更新。
Something like:
就像是:
DefaultListModel listModel=new DefaultListModel();
for (int i=0; i<data.length; i++) {
listModel.addElement(data[i]);
}
list=new JList(listModel);
Then you can simply make changes via the list model e.g.
然后你可以简单地通过列表模型进行更改,例如
listModel.addElement("New item");
listModel.removeElementAt(1); // remove the element at position 1
回答by Devon_C_Miller
You just need to supply your own ListModel:
你只需要提供你自己的 ListModel:
class MyModel extends AbstractListModel {
private String[] items;
public MyModel(String[] items) {
this.items = items;
}
@Override
public Object getElementAt(int index) {
return items[index];
}
@Override
public int getSize() {
return items.length;
}
public void update() {
this.fireContentsChanged(this, 0, items.length - 1);
}
}
After sorting items, just call update.
排序项目后,只需调用update.

