日期:2014-05-20  浏览次数:20613 次

如何再JList里逐个显示数据?
我作一个程序,运行很长时间,我想在程序运行开始时在Jlist里显示 "运行中,请等待... ",在结束时显示 "执行完毕. ",但是不知道怎么在Jlist逐步显示这两个信息.试过以下方法,但总是在程序执行完时一下子显示出来.请指教!

DefaultListModel   resultModel   =   (DefaultListModel)   resultList.getModel();
resultModel.clear();
resultModel.addElement( "运行中,请等待... ");
resultList.revalidate();
resultList.repaint();


.......


resultModel.addElement( "执行完毕. ");


------解决方案--------------------
你试验一下我这个代码,可能是因为你程序执行时间太短了,你看不出来效果
System.out.println( "程序开始运行 ");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println( "程序运行结束 ");
------解决方案--------------------
应该是界面刷新的问题,你的所有操作都在一个线程当中,在你的主线程执行完之前你的整个界面是来不及刷新的。

可以把耗时操作单起一个线程,在你的子线程执行完毕时再调用resultModel.addElement( "执行完毕. ")试试
------解决方案--------------------
不知道楼主是不是这个意思,我先把代码贴上来
package CSDN;

import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class vivan19781111 {
public vivan19781111(){
JFrame f=new JFrame();
DefaultListModel listModel=new DefaultListModel();
JList resultList=new JList(listModel);
resultList.setVisibleRowCount(5);
f.add(new JScrollPane(resultList));
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
listModel.addElement( "运行中,请等待... ");
try{
Thread.sleep(1000);
listModel.remove(0);
listModel.addElement( "执行完毕. ");
Thread.sleep(500);
resultList.setModel(new ListModelDate());
}catch(Exception e){
e.printStackTrace();
}
}

private static class ListModelDate extends AbstractListModel{
public int getSize(){
return 10;
}
public Object getElementAt(int n){
return new Integer(n);
}
}
public static void main(String[] args) {
new vivan19781111();
}
}