2010-04-12 45 views
0

全部,滚动java TextArea的问题

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

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

这里是我实例化TextArea和滚动窗格:

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()); 
} 

感谢您的帮助,

Jonathan

编辑:此外,作为一个附注,与当前的代码,我必须手动s向下滚动。我认为println(line)方法中的setCaretPosition(doc.getLength())会在输入一行后自动将页面设置为底部......应该是这种情况,还是需要采取不同的方式?

回答

2

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

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

+0

非常感谢。 =) – Jonathan 2010-04-12 20:06:13

0

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

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

大声笑,我不会花时间给我一个解决方案 - 即使没有测试它的头。当人们如此忘恩负义时,我讨厌它。谢谢,但Pryrolistical的解决方案工作。 – Jonathan 2010-04-12 20:05:38