我在编程时遇到的问题:使用JScrollPane.getViewport().add(textArea);以后的窗口并没有定位上光标。也就是说当我在textarea里append()文本以后,我的窗体的滚动条并没有像预想的那样出现并且跟踪上光标所在的位置。我想是不是要用JScrollBar去定位一下光标才行,具体有什么建议?
求各位大虾指点迷津!!!
注:以下几种方法均试过:
   1)在JTextArea插入最后一条消息之后,使用selectAll()将光标强制移动到JTextArea的最后
   2)在JTextArea插入最后一条消息之后,使用(JTextArea)recvArea.setCaretPosition(recvArea.getText().length()),将光标移到最后
       

解决方案 »

  1.   

    textarea.requestFocus();
            textarea.setSelectionStart();
            textarea.setSelectionEnd();
            textarea.repaint();
      

  2.   

    1)在JTextArea插入最后一条消息之后,使用selectAll()将光标强制移动到JTextArea的最后
    这个方法我试验了可以的啊。不行的话你先JTextArea.requestFocus();再selectAll();
      

  3.   

    scrollPane.getVerticalScrollBar().setValue(textArea.getHeight());scrollPane是textArea所在的滚动框。
      

  4.   

    //刷新滚动条,将滚动条移到最下面
    //我这里采用的是在另一个线程中刷新
    //jspMsgPane - JScrollPane SwingUtilities.invokeLater(new Runnable()
    {
    public void run()
        {
         jspMsgPane.getVerticalScrollBar().setValue(jspMsgPane.getVerticalScrollBar().getMaximum()+10000);
         }
    }
    );
      

  5.   

    我采用的方法,经测试可行:
          Point p = new Point();
          p.setLocation(0, mainText.getHeight());
          this.mainScrollPane1.getViewport().setViewPosition(p);
    如果想是有需要再滚动,可写成如下:
          Point p = new Point();
          if (!mainText.getScrollableTracksViewportHeight()) {
            p.setLocation(0, mainText.getHeight());
            this.mainScrollPane1.getViewport().setViewPosition(p);
          }