- - PR -
JTextAreaの文字数制限
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-07-03 12:54
お世話になっています。
今作っているアプリのログを、VBの開発環境のイミディエイトウィンドウのように テキストエリア(JTextArea)に出力しようと思います。 VBでアプリを作ったときも同様の機能を作ったときは、テキストボックスを貼り付けま したが64KB(32KB?)の文字数制限があったので、一定数以上の文字数になったときに 前の方の古い文字列を消す処理で対応しました。 JavaのswingのJTextAreaの場合、文字数制限はあるのでしょうか? また、このような機能を作る場合、どのような方法でやればいいのでしょうか? [ メッセージ編集済み 編集者: maru 編集日時 2003-07-03 12:56 ] |
|
投稿日時: 2003-07-03 16:01
ニシトミです。
Java-Houseメーリングリストにも同じ質問がありましたが、残念ながら レスついてませんでした。 APIにも、記述されてませんでした。 私が思ったのは javaのGUIは、クライアントのスペックにも影響があるのではないか?です。 一度PDA端末でAppletを試す機会があったのですが Textareaにログを100行ぐらいだしたとこで、端末フリーズしました。 TextAreaの限界がわかればいいんですけどね。 もし不安だったら、ログファイルに出すとかいろいろあると思います。 参考になれば [ メッセージ編集済み 編集者: ニシトミ 編集日時 2003-07-03 17:19 ] |
|
投稿日時: 2003-07-03 16:52
こんにちは。返答ありがとうございます。参考になります。
Java-Houseにもまったく同じタイトルであったので、これは!と思ったのですが、 レスがなくてがっかりでした。 >javaのGUIは、クライアントのスペックにも影響があるのではないか? サイズ制限などはOSに依存するので決められないのでしょうね。 処理の経過をユーザがリアルタイムで見れるようなログウィンドウを作りたいので、 ファイル出力ではNGです。 JTextAreaにはこだわらずJListでもいいのですが、無限に文字が書き込める テキスト領域がほしいのです。 無限といっても、過去100行程度の履歴が出ればいいのですが。 ちょっと、JTextAreaを拡張して作ってみます。 |
|
投稿日時: 2003-07-04 09:35
どうもWataです。
私の予想ではJTextAreaならOutOfMemoryExceptionが発生するまで、 文字が書き込めると思いますよ。 逆にjava.awt.TextAreaの場合、OSのネイティブなコンポーネントを 使うので、そのコンポーネントの仕様次第になると思います。 そして、Win98系のメモ帳に使われるようなテキストコンポーネントは 文字数制限があったように思います。 心配ならまず試してみればよいのではないでしょうか? JTextAreaに適当な文字列を100行以上表示してみて、 動作を確認するとよいと思います。 |
|
投稿日時: 2003-07-04 10:16
こんにちは。
ためしに作ってみました。 JTextAreaのappendをオーバーライトして、その中で最大行以上になったときに先頭行 を削る処理を追加してみました。効率いいかはわかりませんけど。 import javax.swing.*; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.text.BadLocationException; import javax.swing.text.Document; class JTextAreaEx extends JTextArea{ private int maxrows = 10; public JTextAreaEx(){ super(); } public JTextAreaEx(int rows, int columns){ super( rows, columns ); } public JTextAreaEx(String text){ super( text ); } public JTextAreaEx(String text, int rows, int columns){ super( text, rows, columns ); } public void append(String str){ if( getLineCount() > maxrows ){ try{ int len = getLineEndOffset(0); getDocument().remove( 0, len); }catch( BadLocationException exp ){} } try{ setCaretPosition( getText().length() ); super.append( str + "\n"); }catch( IllegalArgumentException exp ){} } public void setMaxRows( int rows ){ maxrows = rows; } public int getMaxRows(){ return maxrows; } } class Test extends JFrame{ JTextField txt1; JTextAreaEx txt2; public Test(){ super("てすと"); txt1 = new JTextField(""); txt2 = new JTextAreaEx(); txt1.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ev) { txt2.append( txt1.getText()); txt1.setText(""); } }); getContentPane().add( txt1, BorderLayout.NORTH ); getContentPane().add( new JScrollPane( txt2 ), BorderLayout.CENTER ); setSize( 200, 200 ); setVisible(true); } public static void main( String[] args ){ Test frm = new Test(); } } [ メッセージ編集済み 編集者: maru 編集日時 2003-07-04 10:23 ] |
1
