滚动java TextArea的问题

时间:2010-04-12 16:24:52

标签: java textarea scrollpane

所有

我遇到了使用JTextArea和JScrollPane的问题。由于某种原因,滚动窗格似乎无法识别文档中的最后一行,并且只会向下滚动到它之前的行。滚动条甚至没有更改为我可以滑动它的状态,直到文档中的行比textArea显示的行数大两个(它应该在它更大的时候发生)。

有没有人遇到过这个?什么是一个好的解决方案(我想避免在文档的末尾添加额外的'空白'行,每次添加新行时都必须删除它?)

以下是我实例化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())会在输入一行后自动将页面设置为底部......应该是这种情况,还是我需要做一些不同的事情? / p>

2 个答案:

答案 0 :(得分:2)

问题是textArea.setPreferredSize(new Dimension(500, 100));

删除它。设置滚动窗格的perferredSize或框架的大小

答案 1 :(得分:0)

这是一个解决方案吗?我没有测试过,所以请不要杀了我。

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum());