将List的item用icon+文本的方式显示:
public class TJList extends JApplet{ 
    private static class Resource{ 
        Icon icon=new ImageIcon(Resource.class.getResource ("/hezof/swing/japplet/icon.gif")); 
    } 
    private static class MyListModel extends AbstractListModel{ 
        private String[] items={"A",.....}; 
        public int getSize(){ 
            return items.length; 
        } 
        public Object getElementAt(int index){ 
    return items[index]; 
        } 
    } 
    private static class MyListCellRenderer extends JLabel implements  ListCellRenderer{ 
       public Component getListCellRendererComponent(JList list,Object  value,int index,boolean isSelected,boolean hasCellFocus){ 
   if(value !=null){ 
              setText(value.toString()); 
           } 
           setIcon(Resource.icon); 
   setBackground(isSelected?list.getSelectionBackground ():list.getBackground()); 
           setForeground(isSelected? list.getSelectionForeground:list.getForegrond()); 
           return this; 
       } 
    } 
    public void init(){ 
        Container content=getContentPane(); 
        content.setLayout(new GridLayout(1,1)); 
JList list=new JList(new MyListModel()); 
        list.setCellRenderer(new MyListCellRenderer()); 
        content.add(list); 
    } 
} 这个设想被这个现实彻底破灭了: 
JLabel.setBackground(Color)不生效.下面的测试也说明标签背景色不会变的,郁闷哦....tell me why? 
public class JTest extends JApplet{ 
    public void init(){ 
       JLabel lbl=new JLabel("test"); 
       lbl.setBackground(Color.BLUE); 
       getContentPane().add(lbl); 
    } 
    public static void main(String[] args){ 
       JFrame frm=new JFrame(); 
       frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frm.setSize(400,300); 
       JTest test=new JTest(); 
       test.init(); 
       frm.getContentPane().add(test); 
       frm.setVisible(true); 
    } 
}

解决方案 »

  1.   

    哈~是啊,经你这么一说才发现真有这个问题
    不过AWT的LABEL却可以正常显示背景颜色JLabel的setBackground是继承自JComponent的
    同样是继承自JComponent的其它控件使用setBackground却没有问题JComponent间接继承Component,但重写了setBackground我试着继承JLabel,然后重写setBackground方法(代码用的Component的setBackground方法),还是不行.JDK 1.5.08不知道JDK1.6的兄弟是否这种情况?
      

  2.   

    自结贴:/**
    *  原因在于JComponent的setOpaque(boolean)默认情况下是false.
    *  背景透明自然无法显示,笨鸟~
    */ 
    public   class   JTest   extends   JApplet{   
            public   void   init(){   
                  JLabel   lbl=new   JLabel("test");  
                  lbl.setOpaque(true);//here.... 
                  lbl.setBackground(Color.BLUE);   
                  getContentPane().add(lbl);   
            }   
            public   static   void   main(String[]   args){   
                  JFrame   frm=new   JFrame();   
                  frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
                  frm.setSize(400,300);   
                  JTest   test=new   JTest();   
                  test.init();   
                  frm.getContentPane().add(test);   
                  frm.setVisible(true);   
            }   
    }
      

  3.   

    swing还没怎么用过,用了一次就被打败了。。
    请教一下awt和swing的区别大吗??为什么都用swing去了?