全て、
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()) は、行が入力された後にページを自動的に一番下に設定すると想定しました...そうである必要がありますか、それとも別のことをする必要がありますか?