如何在Java GUI中设置JTextArea的AUTO-SCROLLING?
我已经在JScrollPane中embedded了JTextArea,并使用该JTextArea进行输出。
我希望只要输出超出JTextArea的大小,JTextArea会自动滚动,以便用户不必手动向下滚动查看最近的输出。
我怎样才能做到这一点?
我已经将JTextArea和JScrollPane的autoscroll属性设置为true。
当使用JDK1.4.2(或更早版本)时,您在论坛中find的最常见的build议是使用如下所示的代码:
textArea.append(...); textArea.setCaretPosition(textArea.getDocument().getLength());
不过,我刚刚注意到,在JDK5中,这个问题实际上是通过API更改来解决的。 您现在可以通过在文本区域的DefaultCaret上设置一个属性来控制这种行为。 使用这种方法的代码将是:
JTextArea textArea = new JTextArea(); DefaultCaret caret = (DefaultCaret)textArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
有关此主题的更详细的描述可以在这里find: 文本区域滚动
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 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);
尝试这个:
JTextArea jTextArea = new JTextArea(); JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setViewport(jTextArea);