CellRenderer项目重绘

Tob*_*ann 5 java swing jlist jprogressbar listcellrenderer

我创建了自己的CellRenderer,其中包含几个字符串和一个JList项中的JProgressBar ...但是JProgressBar等整个JList项目将绘制一次,我正在寻找一种方法来重新绘制Items ...我试过了开始一个线程,这将永久重绘......但我不知道我需要重新绘制以获得结果...

JList重绘...没有结果CellRenderer重绘...没有结果JFrame重绘...没有结果

有谁理解我的问题并知道出路?

非常感谢你!

更新:[更新已删除]

下一步更新:

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.ListCellRenderer;


public class Main extends JFrame{

public DefaultListModel contentListModel = new DefaultListModel();
public MyCellRenderer MCR = new MyCellRenderer();
public JList contentList = new JList(contentListModel);

public Main(){
    super("Example");
    setMinimumSize(new Dimension(300,300));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    contentList.setCellRenderer(MCR);
    contentListModel.addElement("");
    contentListModel.addElement("");
    add(contentList);
}

public static void main(String[] args){
    new Main().setVisible(true);
}

class MyCellRenderer extends JPanel implements ListCellRenderer{

    public MyCellRenderer(){
        JProgressBar jpb = new JProgressBar();
        jpb.setIndeterminate(true);
        add(jpb);
    }

    @Override
    public Component getListCellRendererComponent(JList arg0, Object arg1,
            int arg2, boolean arg3, boolean arg4) {
        // TODO Auto-generated method stub
        return this;
    }



}

}
Run Code Online (Sandbox Code Playgroud)

Ser*_*kyy 0

这很容易。

public void updateListData(final JList myList) {
  SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      ListModel lm = myList.getModel();
      DefaultListModel dlm = new DefaultListModel();
      for (int i = 0; i < lm.getSize(); i++) {
        dlm.addElement(lm.getElementAt(i));
      }
      myList.setModel(dlm);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以从 EDT 和另一个线程调用。但您还应该阅读如何处理 Swing 组件并了解模型(ListModel、TableModel 等)。要要求 JList 中的元素重新绘制,您应该修改模型中的对象。