關於Java Swing怎麼即時重新整理JTextArea,以顯示剛才加append的內容(線程角度)

來源:互聯網
上載者:User

Java Swing如何即時重新整理JTextArea,以顯示剛才加append的內容

在代碼中執行完textArea.append("message")後,如果你想讓這個更新立刻顯示在介面上而不是等swing的主線程返回後重新整理,我們一般會在該語句後調用textArea.invalidate()和textArea.repaint()。問題是這個方法並不能有任何效果,textArea的內容沒有任何變化,這或許是swing的一個bug,有一個笨拙的辦法可以實現這個效果,就是執行以下語句textArea.paintImmediately(textArea.getBounds());

textArea.paintImmediately(textArea.getX(), textArea.getY(), textArea.getWidth(), textArea.getHeight());

這時,你會發現你剛才增加的訊息已經被即時地顯示出來了。

1 樓 saga_java 2012-06-07 

你確信textArea.append("message")是運行在swing事件處理線程上?

SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {textArea.append("message");}});

2 樓 周凡楊 2012-06-07

 應該是在Frame視窗的線程上,因為我點擊按鈕後,去進行資料處理,資料處理需要很長時間,此時按鈕一直呈現的是被點擊的樣式,Frame線程被阻塞了,所以textArea.append("message");運行後,文字框裡沒有即時的呈現出來!而且現在還有另一種方法,就是在處理資料時,另起一個線程,此時不管處理資料需要多長時間,textArea.append("message");運行後,文字框裡會即時呈現出來!

3 樓 saga_java 2012-06-07 

比較耗費時間的操作不應該在swing事件處理線程上,只有另起一個線程

執行個體

其他外類對jTextArea進行即時更新顯示時,首先要將jTextArea設定為public static,比如有主視窗Frame,其帶有一個jTextArea,要把Data所擷取的資料即時更新到Frame的jTextArea中。則:

假定主視窗Frame類為:

class Frame extends jFrame implements ……{      //設定jTextArea  public static jTextArea  jtextarea;  ……  public Frame (){//建構函式  jtextarea =new  jtTextarea ();  ……   ShowData();//假設建立主表單時,就要擷取,並顯示資料  ……   }     public void ShowData(){         new Thread(new Runnable() {//啟動資料擷取,更新顯示進程                  public void run() {                    Data d = new Data();                    d. outData();                   }              }).start(); //  }  ……  } 

假定資料類Data為:

 

class Data{  ……     public Data(){     ……      }  ……    //假設資料為一個自增數,不斷輸出資料     public void outData(){       for(int i=0; i<10000;i++)       Frame.jtextarea.append( "當前資料為:"+i+"\n"); //調用主視窗的jtextarea進行添加資料,顯示       try {              Thread.currentThread().sleep(100);//讓當前的進程睡眠若干毫秒,更加顯示出動態更新效果,當然這將耗時          } catch (InterruptedException ex) {       //捕獲中斷異常}     }  ……  } 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.