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) {
// }
}
……
}