JList 中要用到  ListCellRenderer
默认的采用
javax.swing 
Class DefaultListCellRenderer
java.lang.Object
  |
  +-java.awt.Component
        |
        +-java.awt.Container
              |
              +-javax.swing.JComponent
                    |
                    +-javax.swing.JLabel
                          |
                          +-javax.swing.DefaultListCellRenderer因为是JLable的子类,所有你只需要继承这个DefaultListCellRenderer并且
在public Component getListCellRendererComponent(JList list,
                                              Object value,
                                              int index,
                                              boolean isSelected,
                                              boolean cellHasFocus)
中加一句setIcon(....)
就可以了

解决方案 »

  1.   

    这个我知道,也是这么做的。
    可是怎么点一下按钮后改变相对应的JList中的icon?
      

  2.   

    JComboBox有一个方法:
    ComboBoxModel getModel()  
    可以得到它的model。
    通常是javax.swing.DefaultComboBoxModel
    在那个按钮的action中得到model,
    调用 
     void removeElementAt(int index) 
              Removes an item at a specific index 

     void insertElementAt(Object anObject, int index) 
              Adds an item at a specific index 
    修改其中某一项的值
    然后
    在repaint和revalidate
    在getListCellRendererComponent实现重画
      

  3.   

    不好意思,没太明白。能详细点么?
    JList也有geModel,也可以remove和insertElement(..)
    可是后面的不知道怎么做了。您能详细点么?
      

  4.   

    你可以参考下面的代码,不太清楚因为太长,这是其中一部分,这是我毕业设计中使用的,应该原理一样吧,可以的话请耐心看。 for(int m=0;m<groupname.size();m++)//--------------------------for
       {
          JList tlist=(JList)vobject.elementAt(m+1);
           DefaultListModel mmm=(DefaultListModel)tlist.getModel();
         n=0;
         while(n<jgroup.size()){//-----------while
         String jgup=(String)jgroup.get(n).toString() ;
         String grupne=(String)groupname.get(m).toString();
         if (jgup.equals(grupne))
         {
           picid1=Integer.parseInt(gpic.get(n).toString());
            if(gstatu.get(n).equals("1")){
                mmm.addElement(new Object[]{gname.get(n),new ImageIcon(picsonline[picid1])});}
           else {
                mmm.addElement(new Object[]{gname.get(n),new ImageIcon(picsoffline[picid1])});  }
           }
         n++;
        }//--------------------end while
       }//---------------------------class tNameAndPicListModel extends DefaultListModel
          {   public tNameAndPicListModel(Vector gname,String [] pics)
              { for(int i=0;i<gname.size();++i){
              addElement(new Object[]{gname.get(i),new ImageIcon(pics[i])});
              }
              }
      public  String getName(Object object)
      { Object[] array=(Object[])object;
      return(String) array[0];
      }
    public Icon getIcon(Object object)
    { Object[] array=(Object[]) object;
      return (Icon) array[1];
      }
    }
      class tNameAndPicListCellRenderer extends JLabel implements ListCellRenderer
    { private Border lineBorder=BorderFactory.createLineBorder(Color.red,2),
               emptyBorder =BorderFactory.createEmptyBorder(2,2,2,2);
      public tNameAndPicListCellRenderer(){
         setOpaque(true);
         }
    public Component getListCellRendererComponent(JList list,Object value,int index,
                                                    boolean isSelected,boolean cellHasFocus)
          { tNameAndPicListModel model=(tNameAndPicListModel) list.getModel();
            setText(model.getName(value));
            setIcon(model.getIcon(value));
            if(isSelected){setForeground(list.getSelectionForeground());
                             setBackground(list.getSelectionBackground());
                             }
              else { setForeground(list.getForeground());
                       setBackground(list.getBackground());}
              if(cellHasFocus) setBorder(lineBorder);
                    else setBorder(emptyBorder);
              return this;
              }
              }
      

  5.   

    to: tdchjy(蓝天)我这样测试过,可是这样就没有改icon。
    我这样(部分):
    ImageIcon icon=new ImageIcon(url);
    model1.insertElementAt(new Object[]{"stain",icon},i);
    可是没有改变iconclass listCellRenderer extends JLabel implements ListCellRenderer中我设了setIcon(icon);
      

  6.   

    也不行啊。详细请看://----------------update jlist icon (部分)URL url=new URL("http://168.1.0.111:8080/test/src/3.jpg");
     ImageIcon icon=new ImageIcon(url);
     model1.insertElementAt(new Object[]{"stain",icon},i);
     this.repaint();//--------------------ListCellRenderer class  (部分)
     URL url=new URL("http://168.1.0.111:8080/test/src/1.jpg");
     ImageIcon icon=new ImageIcon(url);
     setIcon(icon);
    请问有什么地方不对么?