编程语言
首页 > 编程语言> > 在Swing Java中向JList添加元素

在Swing Java中向JList添加元素

作者:互联网

我有一个单击按钮时执行的功能.假设有一个循环将1到10添加到JList.我将该数据添加到DefaultListModel.它工作得很好,数字也增加了.然后我在循环中添加了一个Thread.sleep(1000).但输出是不同的.我想每秒添加1个元素.但现在它等待10秒,并在第10秒结束时将所有1到10加在一起.我错了吗?

List processList = listNumbers.getSelectedValuesList();
DefaultListModel resultList = new DefaultListModel();
listResult.setModel(resultList);

for (int i = 0; i < processList.size(); i++) {
    resultList.addElement(String.valueOf(i));
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException ex) {
    }
}

解决方法:

您应该在单独的线程中更新列表,否则最终会阻止事件派发线程.

请尝试以下方法:

final DefaultListModel model = new DefaultListModel();
final JList list = new JList(model);

//another thread to update the model
final Thread updater = new Thread() {
    /* (non-Javadoc)
     * @see java.lang.Thread#run()
     */
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            model.addElement(i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
};
updater.start();

标签:jlist,java,swing
来源: https://codeday.me/bug/20191006/1861814.html