JLabel jl=new JLabel();for(int i=0;i<10;i++){
jl.setText(String.valueOf(i));
}如上程序所示,我想jlabel循环从0到9显示在界面上。。就是没循环一次界面刷新一下数字。。可上面的程序不会循环刷新数字,而是只显示最终结果9.。谁知道如何解决这个问题,,,让它循环刷新数字。?
jl.setText(String.valueOf(i));
}如上程序所示,我想jlabel循环从0到9显示在界面上。。就是没循环一次界面刷新一下数字。。可上面的程序不会循环刷新数字,而是只显示最终结果9.。谁知道如何解决这个问题,,,让它循环刷新数字。?
for (int i = 0; i < 10; i++) {
jl.setText(String.valueOf(i));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
减少等待时间的话,Thread.sleep(1000);将1000改小就行了
在awt和swing中对事件的处理和对组件的绘制最终都是由一个交awt消息队列的线程完成的,这样一来就只有等循环结束actionPerformed方法返回之后JLabel才会得到重绘,所以你只能看到最终结果9。
解决的方法是在actionPerformed中使用定时器Timer任务去完成,或者也可以调用另一个线程去完成,具体的楼主可以看看API文档。你说的“这样的话我点击开始要等差不多9S才刷新出数字。。”这个问题修改Thread.sleep(1000)方法中的数值就可以了,单位是毫秒,比如1000是指延时1秒。
不需要再调用repaint()方法,setText方法本身就会使组件重绘