关于JLabel使用settext的时候显示刷新的问题
jl[1].setForeground(Color.blue);
jl[1].setText(jl[1].getText());
jl[1].repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
为什么界面上无论把sleep放哪都会先显示sleep一秒再变蓝色
Java
settext
sleep
------解决方案--------------------package test;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class GuiTest extends JFrame {
private static final long serialVersionUID = 1L;
JLabel jl;
public GuiTest() {
//初始化组件
initComponents();
//设置窗口大小
setSize(300, 300);
//关闭
setDefaultCloseOperation(EXIT_ON_CLOSE);
//可见
setVisible(true);
//睡眠,便于观察
try {
Thread.sleep(2000);
} catch(InterruptedException e) {}
//改变背景颜色
jl.setForeground(Color.BLUE);
}
//初始化组件
/**
* 添加一个标签,名字是"blue"
* 加入Frame
* 设置获取标签(它本身)
* 重画
* @throws InterruptedException
*/
private void initComponents() {
jl = new JLabel("blue");
add(jl);
jl.setText(jl.getText());
jl.repaint();
}
// test
//启动窗口
public static void main(String[] args) {
new GuiTest();
}
}
你看看这样行不行?
------解决方案--------------------这个涉及到线程问题,在GUI中要显示的东西都是有一个叫做GUI分发线程(好像是叫这个名字)的线程来完成显示及更新活动的,而这个线程是与程序的主线程相关联的,当你用sleep将主线程睡眠的同时,分发线程也跟着休眠了,所以这个时候更新事件被放置,一直等到主线程激活后,分发线程才开始工作,这个时候你的更新命令才得到执行,所以又你上面产生的结果,希望这个回答对你有用。