为什么JTextArea加到JScrollPane中当文本宽度超过自身的宽度没有自动显示水平滚动条
文本长度超过自身的长度垂直滚动条没有随之滚动ReceivejPanel = new JPanel();
AnchorLayout ReceivejPanelLayout = new AnchorLayout(); getContentPane().add(ReceivejPanel, BorderLayout.NORTH); ReceivejPanel.setLayout(ReceivejPanelLayout); ReceivejPanel.setPreferredSize(new java.awt.Dimension(492, 173));
{
ReceivejLabel = new JLabel();
ReceivejPanel.add(ReceivejLabel, new AnchorConstraint(26, 208, 135, 1, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
AnchorLayout ReceivejLabelLayout = new AnchorLayout();
ReceivejLabel.setLayout(ReceivejLabelLayout);
ReceivejLabel.setText("\u63a5\u6536\u6d88\u606f\u7a97\u53e3");
ReceivejLabel.setFont(new java.awt.Font("KaiTi_GB2312",3,16));
ReceivejLabel.setForeground(new java.awt.Color(0,255,255));
ReceivejLabel.setPreferredSize(new java.awt.Dimension(102, 19));
}
{
ReceivejScrollPane = new JScrollPane();
ReceivejPanel.add(ReceivejScrollPane, new AnchorConstraint(170, 1001, 997, 1, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
ReceivejScrollPane.setPreferredSize(new java.awt.Dimension(492, 143));
{
  ReceivejTextArea = new TextAreacvp();            ReceivejScrollPane.getViewport().add(ReceivejTextArea,null);
ReceivejTextArea.setPreferredSize(new java.awt.Dimension(474, 141));
ReceivejTextArea.setEditable(false);
ReceivejTextArea.setBackground(new java.awt.Color(192,192,192));
ReceivejTextArea.setForeground(new java.awt.Color(0,0,255));
ReceivejTextArea.setLineWrap(true);
}
}

解决方案 »

  1.   

    你没有给你的textarea加上滚动条嘛 这些都是要手动设置的
      

  2.   

    只是把JTextArea加到JScrollPane中不可以?
    怎么我的这样一个例子就可以?
    import javax.swing .*;
    public class Test extends JFrame
    {
    public Test()
    {
    JPanel   contentPane      =   (JPanel)   this.getContentPane();        JTextArea   jTAinput   =   new   JTextArea();  
          JScrollPane   jScrollPane1   =   new   JScrollPane();  
          contentPane.add(jScrollPane1,   null);      
          jScrollPane1.getViewport().add(jTAinput,   null);        this.setVisible(true);
    }
    public static void main(String args[])
    {
           Test t = new Test();

    }
    }
      

  3.   

    把这一句:
     
    ReceivejScrollPane.getViewport().add(ReceivejTextArea,null);换成:    ReceivejScrollPane.setViewportView(ReceivejTextArea);
      

  4.   

    起初用jigloo生成的代码就是你说的方式,是不可以的。
      

  5.   

    两个的位置大小设置成一样的,还有把JScollPanel设置成是水平滚动的还是垂直滚动的.
      

  6.   

    我是用一个线程,固定时间间隔将光标挪到文本末尾实现滚动的TimerTask task = new TimerTask() { // 实现结果自动滚屏
    @Override
    public void run() {
    resultArea.setSelectionStart(resultArea.getText().length());
    }
    };
    Timer timer = new Timer();
    timer.schedule(task, 0, 1000);
      

  7.   

    应该改成:ReceivejScrollPane.getViewport().add(ReceivejTextArea);试试。以前我也是这么写的没出现过楼主的问题。如果不行的话,我在想想
      

  8.   

    ReceivejScrollPane = new JScrollPane();
    ReceivejScrollPane.getViewport().add(ReceivejTextArea);
    这样就可以了
      

  9.   

    很简单,在每次添加完文本后调用:
    JScrollBar bar = ReceivejScrollPane.getVerticalScrollBar();
    bar.setValue(bar.getMaximum());
    楼主试试看.
      

  10.   

    唉~~你这些代码是使用可视化工具生成的吧~~可以说,垃圾代码非常之多……很乱
    ReceivejTextArea.setPreferredSize(new java.awt.Dimension(474, 141));
    问题在这里。一定要要设置大小的话,给滚动视图设置大小,不要给里面的设置。
    你要知道,scrollpane里面的viewport需要计算可见区域以及视图整个区域,计算出滚动条需要滚动到哪里。你把里面的一部分重置,却又不完全,滚动条当然就会出现一些你所谓的怪异现象了。jtextarea不直接管理滚动,但是实现scrollable接口:Dimension getPreferredScrollableViewportSize() 
              返回视图组件视口的首选大小。 
     int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) 
              显示逻辑行或列的组件应计算滚动增量,它将根据方向的值完全公开一个行块或列块。 
     boolean getScrollableTracksViewportHeight() 
              如果视口总是强制此 Scrollable 的高度与视口高度匹配,则返回 true。 
     boolean getScrollableTracksViewportWidth() 
              如果视口总是强制此 Scrollable 的宽度与视口宽度匹配,则返回 true。 
     int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 
              显示逻辑行或列的组件应计算滚动增量,它将根据方向的值完全公开一个新的行或列。 
    去看一下文档,最好看一下源码,你就会有深刻理解了
      

  11.   

    不要把JScrollPane 加到JPanel里去。问题出在这里!!JPanel作为容器了当然你就看不到滚动条了。
      

  12.   

    如果你开始就想看到滚动条,那你JTextArea的大小要大于窗口的大小。可以给你个例子,你自己去运行下。还有你的命名风范很有问题。
    import javax.swing.*;
    import javax.swing.SwingUtilities;
    import java.awt.*;public class A extends JFrame { /**
     * @param args
     */
    private JTextArea jta = new JTextArea();
    private JScrollPane jsp = new JScrollPane();
    JPanel jp = new JPanel(); public A() {
    jta.setPreferredSize(new Dimension(100, 100));
    // jsp.setPreferredSize(new Dimension(300,400));
    jsp.getViewport().add(jta, null);
    // jp.setPreferredSize(new Dimension(200,400));
    //jp.add(jsp);
    this.getContentPane().add(jsp);
    } public static void run(final JFrame frame, final int width, final int height) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    frame.setSize(width, height);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    });
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    run(new A(), 200, 300);
    }}
      

  13.   

    最后一句
    ReceivejTextArea.setLineWrap(true);
    改为
    ReceivejTextArea.setLineWrap(false);
      

  14.   

    jta为JTextArea,jsp = new JScrollPane(jta,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);contentPane.add(jsp);