我在JScrollPane中嵌入了一个JTextArea,并使用该JTextArea进行输出。如何在Java GUI中设置JTextArea的自动SCROLLING?
我希望每当输出超出JTextArea的大小时,JTextArea会自动滚动,以便用户不必手动向下滚动以查看最近的输出。
我该怎么做?
我已经将JTextArea和JScrollPane的autoscroll属性设置为true。
我在JScrollPane中嵌入了一个JTextArea,并使用该JTextArea进行输出。如何在Java GUI中设置JTextArea的自动SCROLLING?
我希望每当输出超出JTextArea的大小时,JTextArea会自动滚动,以便用户不必手动向下滚动以查看最近的输出。
我该怎么做?
我已经将JTextArea和JScrollPane的autoscroll属性设置为true。
使用JDK1.4.2(或更早),您将在论坛上找到最常见的建议是使用如下代码:
textArea.append(...);
textArea.setCaretPosition(textArea.getDocument().getLength());
但是,我刚才注意到,在JDK5这个问题实际上已通过API更改得到解决。您现在可以通过在文本区域的DefaultCaret上设置属性来控制此行为。使用这种方法的代码如下:
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
一个这个话题的更详细的描述可以在这里找到:Text Area Scrolling
JScrollBar vbar = scrollPane.getVerticalScrollBar();
for (int i = 0; i < 20; i++) {
myJTxt.append("This is text " + i + "\n");
vbar.setValue(vbar.getMaximum());
vbar.paint(vbar.getGraphics());
myJTxt.scrollRectToVisible(myJTxt.getVisibleRect());
myJTxt.paint(myJTxt.getGraphics());
try {
Thread.sleep(250);
} catch (InterruptedException ex) {
Logger.getLogger(ScrollTextView.class.getName()).log(Level.SEVERE, null, ex);
}
}
试试这个:
JTextArea jTextArea = new JTextArea();
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setViewport(jTextArea);
不是.............. – mKorbel 2013-11-14 13:26:08
当你点击任何地方了JTextArea,自动滚动有可能被停止。因为脱字符号的位置一旦改变,观点也改变了。在这段时间,当你附加或添加一些文本时,你应该设置插入符的位置。在我的路上,我制作了包括设置插入位置的方法,然后在添加或追加任何内容时使用它。
JTextArea jTextArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)jTextArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM);
使用这个代替
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
scrollPane = new JScrollPane();
scrollPane.add(textArea);
scrollPane.setViewportView(textArea);
@camickr,我无法访问的链接,我坐在一个企业防火墙后面。你可以发布重要的东西从那个链接,我会投票给你:)谢谢。 – 2009-10-27 03:42:28
任何想法为什么这可能不工作(为什么它的价值表格是使用Netbeans构建器创建的)? – 2013-07-15 22:02:41
@ cyber-monk,编号创建一个SSCCE。如果它仍然不起作用,那么你可以创建一个问题并发布你的SSCCE。 – camickr 2013-07-16 00:19:39