簡體   English   中英

為什么setText對JLabel組件不起作用?

[英]Why doesn't setText work for JLabel component?

我有一個要隨時更改的JLabel ,這是我編寫的代碼:

infoLabel.setText("Added");
try {
   TimeUnit.MILLISECONDS.sleep(300);
}
catch(InterruptedException ex)
{
}

infoLabel.setText("Action"); //funny part is when I comment this line it works

標簽的默認文本是“操作”

Swing是一個單線程框架,這意味着,如果您執行任何停止該線程的操作,則它將無法響應任何新事件,包括繪畫請求。

基本上, TimeUnit.MILLISECONDS.sleep(300)導致事件調度線程進入睡眠狀態,從而阻止其處理任何新的繪制請求(以及其他操作)。

相反,您應該使用javax.swing.Timer

看一眼

更多細節

例如...

infoLabel.setText("Added");

Timer timer = new Timer(300, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        infoLabel.setText("Action");
    }
});
timer.setRepeats(false);
timer.start();

注意,300毫秒是一個很短的時間,您可能希望以一個稍大的值開始,例如2000,即2秒;)

您正在休眠Swing事件線程,從而使整個GUI進入休眠狀態。 不要那樣做 請改用Swing計時器。

您的應用程序在單個線程上運行,因此當您使線程休眠時,可以防止它進行任何GUI更新。

您確定做事正確嗎? 通過執行GUI線程中的所有操作(包括睡眠),它將始終很忙,並且永遠不會回到Java上來重新繪制GUI。

搜索EDT(事件調度線程)以獲取更多信息。 這是關於此主題的一個問題: 處理代碼不起作用(線程,draw(),noLoop()和loop())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM