一個SWING的怪問題

來源:互聯網
上載者:User

我最近在做學校裡一個關於作業系統的實驗,主要實現進程調度的演算法,但要求是可視化,即動態地表現出進程的變化情況.這就牽涉到了介面的動態變化,比如JLabel上的文字要不斷變化,由於我對SWING不熟悉所以碰到了一個大問題,如下.
比如我有一個Button被監聽,一旦按下便動態地不斷改變JLable上的文字.
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
while(條件){
slow();//減慢程式速度,容易看出動態變化

label.setText("不同內容");//每次顯示的內容不一樣
}

}
}
}
但很不幸出現了問題,label上只顯示迴圈最後一次出現的文字,事先聲明我加入了slow()方法來減慢變化速度,所以不存在由於變化過快無法看清的理由.查了點SWING的原理,發現SWING的組件是"畫"上去的,並不是像AWT那樣"粘"上去的,便聽了很多網友的告戒使用了很多重繪的方法,但還是不行.
此時有一件事讓我很在意,即其實label上的字只變化了一次,那便是迴圈的最後一次.我做了另一個實驗:
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

slow();//減慢程式速度,容易看出動態變化

label.setText("內容1");
slow();
label.setText("內容2");

}
}
}
結果是label上只顯示了內容2,內容1並沒有顯示.   這個時候我猜測了這樣一種可能:每次事件的觸發,只能改變
SWING一次,由於時間不多,我也無法求證,但總得解決這個問題.所以我準備迂迴這個問題.
我的做法是不斷觸發事件,來類比一個事件中的迴圈.
具體方法如下: 初始化一個SWING定時器, Timer time=new Timer(10,listener);  規定其每10秒執行一次,並把
事件交給listener監聽,一旦Button被按下,變讓time.start();     然後time類便會每過10秒便會觸發事件,事件處理
裡寫的就是label.setText("不同內容");  從而達到了目的.
雖然我這樣並不高效,但畢竟解決了問題,以後再慢慢研究swing了.:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.