5

サーバーから 10 秒ごとに情報を受け取る Java アプリケーションを作成しました。この情報をフォームに表示したいと考えています。

現在、私は JTextArea を使用しています。ただし、JTextArea がいっぱいになると、この JTextArea に追加された新しい情報が表示されません。JTextArea にスクロール バーを追加する必要がありますか? または、x 秒ごとに追加される情報を表示するために推奨される、GUI フォーム用のまったく新しい別のコントロールがありますか?

4

2 に答える 2

10

DefaultCaretは自身を可視化しようとしますが、これにより、 内のテキスト コンポーネントがスクロールする可能性がありますJScrollPaneDefaultCaret#setUpdatePolicyデフォルトのキャレットの動作は、メソッドによって変更できます。

変数の名前が であると仮定すると、textAreaキャレットのポリシーを変更するだけで済みます。

DefaultCaret caret = (DefaultCaret) textArea.getCaret(); // ←
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);       // ←
...
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(textArea);

* ありがとう、mKorbel

于 2013-05-18T06:16:42.333 に答える
3

JTextArea にスクロール バーを追加する必要がありますか?

テキスト領域を に追加しますJScrollPane。詳細と例については、スクロール ペインの使用方法を参照してください。

次に例を示します。

テキストエリア - スクロール可能

import java.awt.*;
import java.io.*;
import javax.swing.*;

class TextAreaScrolling {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                final JTextArea out = 
                        new JTextArea(5,10); // suggest columns & rows
                JScrollPane outScroll = new JScrollPane(out);

                File f = new File("TextAreaScrolling.java");
                try {
                    Reader reader = new FileReader(f);
                    out.read(reader, f);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                JOptionPane.showMessageDialog(null, outScroll);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}
于 2013-05-18T05:56:53.647 に答える