Java SwingでJTextAreaをリアルタイムでリフレッシュする方法について、先ほどappendを追加した内容(スレッド角度)を表示します.

2583 ワード

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イベント スレッドにあるべきではなく、 のスレッドしか きない.
≪インスタンス|Instance|emdw≫
の クラスが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+"
"); // jtextarea , try { Thread.currentThread().sleep(100);// , , } catch (InterruptedException ex) { // } } …… }