JLabel jl=new JLabel();for(int i=0;i<10;i++){

  jl.setText(String.valueOf(i));

}如上程序所示,我想jlabel循环从0到9显示在界面上。。就是没循环一次界面刷新一下数字。。可上面的程序不会循环刷新数字,而是只显示最终结果9.。谁知道如何解决这个问题,,,让它循环刷新数字。?

解决方案 »

  1.   

    答案是循环太快了,人的肉眼无法看到显示变化……这样改: JLabel jl = new JLabel();
    for (int i = 0; i < 10; i++) {
    jl.setText(String.valueOf(i));
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

      

  2.   

    少了repaint()吧;
    减少等待时间的话,Thread.sleep(1000);将1000改小就行了
      

  3.   

    我明白了楼主的情况了,楼主是把上面这段代码的调用写在了按钮事件处理里对吧?
    在awt和swing中对事件的处理和对组件的绘制最终都是由一个交awt消息队列的线程完成的,这样一来就只有等循环结束actionPerformed方法返回之后JLabel才会得到重绘,所以你只能看到最终结果9。
    解决的方法是在actionPerformed中使用定时器Timer任务去完成,或者也可以调用另一个线程去完成,具体的楼主可以看看API文档。你说的“这样的话我点击开始要等差不多9S才刷新出数字。。”这个问题修改Thread.sleep(1000)方法中的数值就可以了,单位是毫秒,比如1000是指延时1秒。
      

  4.   


    不需要再调用repaint()方法,setText方法本身就会使组件重绘