第一种:import java.applet.*;
import java.awt.*;
import java.awt.event.*;public class ListTest extends Applet{
 L l=new L(3,true);
 String msg="";
 
 class L extends List{ 
  L(){
   super();
  }
  L(int a){
   super(a);
  }
  L(int a,boolean b){
   super(a,b);
   addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent i){
     msg="";
     String[] ms=getSelectedItems();
     for(int j=0;j<ms.length;j++){
      msg+=ms[j];
      msg+=" ";
     }
     repaint();   //为什么运行时这里repaint()起不了预期的作用?
    }
   });
  }
 }
 
 public void init(){
  l.add("liudehua");
  l.add("liangchaowei");
  l.add("gutianle");
  l.add("rendahua",-1);
  l.add("liujialing",1);
  l.add("zhangmanyu");
  add(l);
 } public void paint(Graphics g){
  g.drawString(msg, 10, 60);
 }
}
======================================================================
第二种:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;public class ListTest extends Applet{
 List l=new List(3,true);
 String msg="";
 
 public void init(){
  l.add("liudehua");
  l.add("liangchaowei");
  l.add("gutianle");
  l.add("rendahua",-1);
  l.add("liujialing",1);
  l.add("zhangmanyu");
  l.addItemListener(new ItemListener(){
   public void itemStateChanged(ItemEvent i){
    String[] ms=l.getSelectedItems();
    for(int j=0;j<ms.length;j++){
     msg+=ms[j];
     msg+=" ";
    }
    repaint();    //为什么运行时这里repaint()起不了预期的作用?
    msg="";
   }
  });
  add(l);
 } public void paint(Graphics g){
  g.drawString(msg, 10, 60);
 }
}

解决方案 »

  1.   

    改成这样的:
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;public class Test extends Applet{
     List l=new List(3,true);
     String msg="";
     
     public void init(){
      l.add("liudehua");
      l.add("liangchaowei");
      l.add("gutianle");
      l.add("rendahua",-1);
      l.add("liujialing",1);
      l.add("zhangmanyu");
      l.addItemListener(new ItemListener(){
       public void itemStateChanged(ItemEvent i){
       msg="";
        String[] ms=l.getSelectedItems();
        for(int j=0;j<ms.length;j++){
         msg+=ms[j];
         msg+=" ";
        }
         repaint(); //为什么运行时这里repaint()起不了预期的作用?
       
       }
      });
      add(l);
     } public void paint(Graphics g){
      g.drawString(msg, 10, 60);
     }
    }
      

  2.   

    init只在程序加栽的时候运行一次
      

  3.   

    对啊,而且你第二个程序里
    repaint();    
        msg="";
    重画了之后又被你置空了,所以显不出来