日期:2014-05-20  浏览次数:20730 次

JTextArea中文本问题
为什么JTextArea加到JScrollPane中当文本宽度超过自身的宽度没有自动显示水平滚动条
文本长度超过自身的长度垂直滚动条没有随之滚动
Java code

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);
    }
}



------解决方案--------------------
你没有给你的textarea加上滚动条嘛 这些都是要手动设置的
------解决方案--------------------
滚动条的水平条没设置
------解决方案--------------------
把这一句:
Java code
 
ReceivejScrollPane.getViewport().add(ReceivejTextArea,null);

------解决方案--------------------
两个的位置大小设置成一样的,还有把JScollPanel设置成是水平滚动的还是垂直滚动的.
------解决方案--------------------
我是用一个线程,固定时间间隔将光标挪到文本末尾实现滚动的
Java code

TimerTask task = new TimerTask() { // 实现结果自动滚屏
    @Override
    public void run() {
        resultArea.setSelectionStart(resultArea.getText().length());
    }
};
Timer timer = new Timer();
timer.schedule(task, 0, 1000);

------解决方案--------------------


应该改成:ReceivejScrollPane.getViewport().add(ReceivejTextArea);试试。以前我也是这么写的没出现过楼主的问题。如果不行的话,我在想想
------解决方案--------------------
定义的变量首字母最好小写,这样不容易阅读。楼主之前是弄C++的?
------解决方案--------------------
ReceivejScrollPane = new JScrollPane();
ReceivejScrollPane.getViewport().add(ReceivejTextArea);
这样就可以了
------解决方案--------------------
很简单,在每次添加完文本后调用:
JScrollBar bar = ReceivejScrollPane.getVerticalScrollBar();
bar.setValue(bar.getMaximum());
楼主试试看.
------解决方案--------------------
学习
------解决方案--------------------
唉~~你这些代码是使用可视化工具生成的吧~~可以说,垃圾代码非常之多……很乱
ReceivejTextArea.setPreferredSize(new java.awt.Dimension(474, 141));
问题在这里。

一定要要设置大小的话,给滚动视图设置大小,不要给里面的设置。