首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JTextArea中文本有关问题

2012-08-03 
JTextArea中文本问题为什么JTextArea加到JScrollPane中当文本宽度超过自身的宽度没有自动显示水平滚动条文

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));
问题在这里。

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


你要知道,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) 
显示逻辑行或列的组件应计算滚动增量,它将根据方向的值完全公开一个新的行或列。 
去看一下文档,最好看一下源码,你就会有深刻理解了
[解决办法]
不要把JScrollPane 加到JPanel里去。问题出在这里!!JPanel作为容器了当然你就看不到滚动条了。

[解决办法]
如果你开始就想看到滚动条,那你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);
}

}

热点排行