0

全て、

JTextArea と JScrollPane を使用して問題が発生しています。何らかの理由で、スクロール ペインがドキュメントの最後の行を認識していないように見え、その前の行までしかスクロールしません。スクロール バーは、ドキュメントの行数が textArea に表示される行数よりも 2 行増えるまで、スライドできる状態に変化しません (1 行増えるとすぐに発生するはずです)。

誰もこれに遭遇したことがありますか?良い解決策は何ですか (新しい行を追加するたびに削除する必要がある、ドキュメントの最後に余分な「空白」行を追加する必要がないようにしたい)?

TextArea と ScrollPane をインスタンス化する方法は次のとおりです。

JFrame frame = new JFrame("Java Chat Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = frame.getContentPane();
if (!(pane.getLayout() instanceof BorderLayout)) {
    System.err.println("Error: UI Container does not implement BorderLayout.");
    System.exit(-1);
}

textArea = new JTextArea();
    textArea.setPreferredSize(new Dimension(500, 100));
    textArea.setEditable(false);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
JScrollPane scroller = new JScrollPane(textArea);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    pane.add(scroller, BorderLayout.CENTER);

textArea に新しい行を追加するために使用する方法は次のとおりです。

public void println(String a)
{
    textArea.append(" "+a+"\n");
    textArea.setCaretPosition(textArea.getDocument().getLength());
}

ご協力いただきありがとうございます、

ジョナサン

編集:また、補足として、現在のコードでは手動で下にスクロールする必要があります。println(line) メソッドの setCaretPosition(doc.getLength()) は、行が入力された後にページを自動的に一番下に設定すると想定しました...そうである必要がありますか、それとも別のことをする必要がありますか?

4

2 に答える 2

2

問題はtextArea.setPreferredSize(new Dimension(500, 100));

それを削除します。代わりに、スクロールペインの perferredSize またはフレームのサイズを設定します

于 2010-04-12T16:53:04.673 に答える
0

これは解決策ですか?私はそれをテストしなかったので、私を殺さないでください。

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum());
于 2010-04-12T16:59:29.050 に答える