JTextArea chat;
JScrollPane scollPanel;
JScrollBar jsb;
我喜欢的方法是:
chat.selectAll();//显示在最后一行
官方方法是:
jsb=scollPanel.getVerticalScrollBar();//
jsb.setValue(jsb.getMaximum());//
为了在聊天软件中实现把最新的记录明显的显示出来的功能,我想让滚动条自动的滚动到JTextArea的最后,但是找了很久都没找到合适的方法。曾经想在JScrollBar上做做文章,但是很可惜找不到出路。
后来发现了几个方法,虽然有投机取巧的嫌疑,但是思路很灵活,拿出来和大家共享。
(1)JTextArea.selectAll();
(2)JTextArea.setCaretPosition(JTextArea.getText().length());
(3)JScrollPane.getViewport().add(JTextArea,null);
Point p = new Point();
p.setLocation(0,JTextArea,getLineCount() * int);
JScrollPane.getViewprot.setViewPosition(p);
说明:1)(1)(2)两种方法都是强制将光标移动到JTextArea中文字部分的末尾,而且两者都是在JTextArea的父类JTextComponent中定义的方法。孰优孰劣暂时看不出来,不过猫猫使用的是第一种,因为需要敲的字符数少。
2)(3)虽然麻烦但是属于学院派的用法,完全不会给人投机取巧的感觉。
3)三种方法都必须在JTextArea中添加了新内容后再调用,不能先调用此方法再添加内容,那样不会有任何效果。也就是说,此三种方法不是静态的设置 属性,而是对属性的一种动态的修改,一次修改只能在当时这一次操作中有效,必须在每次修改属性所关联的内容后再修改才有用。
4)三种方法在JDK1.5.0_02下测试正确。其他环境下调试出现异常请酌情处理。
JTextPane或JTextPane设置了滚动条,文本增加后,滚动条自动下滑
博客分类: Swing
JTextPane或JTextPane设置了滚动条,文本增加后,滚动条自动下滑
例如:日志打印窗口,日志增加后,滚动条自动下滑,显示最新的日志。
实现方法:将光标移动到文本的最后。
JTextArea的实现:
Java代码
//实现垂直滚动条自动下滑到最低端
logTxtArea.setCaretPosition(logTxtArea.getText().length());
JTextPane的实现:
Java代码
//实现垂直滚动条自动下滑到最低端
msgShowTxtPane.setCaretPosition(msgShowTxtPane.getStyledDocument().getLength());