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(....)
就可以了
默认的采用
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(....)
就可以了
可是怎么点一下按钮后改变相对应的JList中的icon?
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实现重画
JList也有geModel,也可以remove和insertElement(..)
可是后面的不知道怎么做了。您能详细点么?
{
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;
}
}
我这样(部分):
ImageIcon icon=new ImageIcon(url);
model1.insertElementAt(new Object[]{"stain",icon},i);
可是没有改变iconclass listCellRenderer extends JLabel implements ListCellRenderer中我设了setIcon(icon);
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);
请问有什么地方不对么?