当前位置: 代码迷 >> J2SE >> 关于JLabel使用settext的时候显示刷新的有关问题
  详细解决方案

关于JLabel使用settext的时候显示刷新的有关问题

热度:22   发布时间:2016-04-23 22:30:00.0
关于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将主线程睡眠的同时,分发线程也跟着休眠了,所以这个时候更新事件被放置,一直等到主线程激活后,分发线程才开始工作,这个时候你的更新命令才得到执行,所以又你上面产生的结果,希望这个回答对你有用。