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