Swing中怎样使JScrollPane中滚动条始终在最下面

摘要:
1.使用JTextArea的selectAll();方法强制光标移动到添加信息后的最后一行。2.使用JTextArea的setCaretPosition();4.我在网上想,我的朋友用英语说了一个棘手的处理方法JTextPane pane=new JTextPane();

最近用swing写了一个简单的聊天界面,但是页面上的JScrollPane一直移动在最上面,下面是解决怎么让JScrollPane移动到最后一行的几种方法:

1. 利用JTextArea的selectAll();方法在添加信息之后强制将光标移动到最后一行。据说是Aviva中采用的方式。
2.使用JTextArea的setCaretPosition();手动设置光标的位置为最后一行。人气颇高。使用方法也很简单,如下:textArea.setCaretPosition(textArea.getDocument().getLength());
3.(copy的)在JTextArea加载了自动滚动条JScroll之后,将JTextArea加入到JScrolPanel的ViewPort中: (有一些Bug,使得图像有点闪烁) 
     recvScrollPane.getViewport().add(recvArea, null);
     然后在JTextArea插入最后一条新消息之后,将滚动条的Viewport重新设置到最底端的位置:
     int height = 20;
     Point p = new Point();
     p.setLocation(0, recvArea.getLineCount() * height);
     recvScrollPane.getViewport().setViewPosition(p);
4.网上以为仁兄用英文说的tricky treatment
JTextPane pane = new JTextPane();... // add some text to the JTextPane...
    Document doc = pane.getDocument();
   pane.select(doc.getLength(), doc.getLength()); // this should enforce the viewport move to where the line being selected.
   ...
5.这似乎是最常用的方法,但是实际使用情况是只能到倒数第二行。
JScrollBar   sbar=spContainer.getVerticalScrollBar();   
sbar.setValue(sbar.getMaximum());

免责声明:文章转载自《Swing中怎样使JScrollPane中滚动条始终在最下面》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇facl权限(getfacl/setfacl)SQL Server2008数据库如何改名下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

代理和协议区别及应用

协议与代理 一、理解协议与代理协议:协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。代理:代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是我的代理。二、...

内存映射mmap

Table of Contents 1. 什么是mmap 2. 使用方法 2.1. mmap构造器的格式 2.2. 例子1 2.3. 例子2 3. 其它 4. 参考资料 什么是mmap通常在Unix系统里有两种操作的数据类型:内存地址和流文件(stream)。通过操作内存地址的方法涉及的操作有:pointers, malloc/free之类,...

C# WinForm获得主窗体——如何判断哪个是主窗体

一. 关于定义 主窗体的定义一般有两种。第一种就是一般上,普遍意义认为是程序中第一个被创建出来的窗体,但是由于一些程序在显示主窗体之前会有一个登录或者引导窗体,在使用完了之后直接隐藏而不是关闭。这个时候,主窗体并不会是第一个窗体。所以,第二种说法就是说,包含了软件整体功能的展示性界面所在的窗体,我们称之为主窗体。 而在本文中,所有叙述中所指的主窗体都是指的...

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换

前言   上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题。当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题。也是接下来我要解决的问题,缓存模块。为什么要解决这个问题呢,由于我们有些下载代码运行的小伙伴,发现怎么运行报错,原来是没有装redis。可是我只想看layim和si...

python面试1

注:本面试题来源于网络,转载请注明来自http://www.cnblogs.com/goodhacker/p/3366618.html。 1. (1)python下多线程的限制以及多进程中传递参数的方式  python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程...

下载文件夹的解决方案

ASP.NET批量下载文件的方法 这篇文章主要介绍了ASP.NET批量下载文件的方法,实例汇总了常见的asp.net实现批量下载的方法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了ASP.NET批量下载文件的方法。分享给大家供大家参考。具体方法如下: 一、实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存...