关于JAVA滚动条自动滚动的问题

我把JTable加在JScrollPane上,以实现表格的自动滚动。现在要实现这样的一种滚动效果:信息一条一条在定时增加,当一个窗口显示满了,下一条来的时候,不是向上滚动... 我把JTable加在JScrollPane上,以实现表格的自动滚动。
现在要实现这样的一种滚动效果:
信息一条一条在定时增加,当一个窗口显示满了,下一条来的时候,不是向上滚动一条,而是滚动一页。也就是说,这一条不是顶着窗口底,而是下面有空余。
由于表格只有这么大,要让滚动条定位到表格没到的地方,我不知道该怎么做。。。

JTable加在JScrollPane上,滚动条scrollbar.getMaximum(),最大就是table的长度,现在就是要让滚动条设置到超过table长度的地方。

就是yang163_yang说的意思。
展开
 我来答
yang163_yang
2010-05-21 · TA获得超过499个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:265万
展开全部
import java.io.*;
import java.util.Hashtable;
import java.util.Vector;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

public class T extends JFrame {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new T();
}

JButton btnA = new JButton("add");
JTable tab = new JTable();
JScrollBar bar = new JScrollBar();
JScrollPane sp = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

int row = 0;

Vector<Hashtable<String,String>> data = new Vector<Hashtable<String,String>>();

int page;
int totalPage;
int pageSize = 20;
int displayCount;

public T() {
super("table");

this.setSize(400,400);
this.setLayout(new BorderLayout());
this.add(btnA,BorderLayout.SOUTH);

JPanel p = new JPanel(new BorderLayout());
//p.add(sp,BorderLayout.CENTER);
//p.add(bar,BorderLayout.EAST);
bar.addAdjustmentListener(new AdjustmentListener() {

public void adjustmentValueChanged(AdjustmentEvent e) {
page = bar.getValue();
System.out.println(e.getAdjustmentType());
refresh(false);
}

});
bar.setUnitIncrement(1);
bar.setMinimum(1);
bar.setMaximum(1);
bar.setValue(1);
sp.setViewportView(tab);
//sp.setVerticalScrollBar(bar);
//sp.revalidate();
//bar.revalidate();
p.add(sp,BorderLayout.CENTER);
p.add(bar,BorderLayout.EAST);
this.add(p,BorderLayout.CENTER);
tab.setModel(new TModel());
btnA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Hashtable<String,String> h = new Hashtable<String,String>();
h.put("a", "aa");
h.put("b", "bb");
data.add(h);
refresh(true);
bar.setValue(page);
bar.setMaximum(totalPage);

bar.revalidate();
bar.repaint();
}
});

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}

void refresh(boolean end) {
totalPage = data.size()/pageSize;
if(data.size()%pageSize!=0)totalPage++;
if(end)page = totalPage;
displayCount = (data.size()-(page-1)*pageSize)>pageSize?pageSize:data.size()-(page-1)*pageSize;
if(page==0)displayCount = 0;
System.out.println(displayCount);
//System.out.println(data.size()+","+totalPage+","+page+","+displayCount);
tab.revalidate();
this.repaint();

}

class TModel extends AbstractTableModel {

public int getColumnCount() {
return 2;
}

public int getRowCount() {
return displayCount;
}

public Object getValueAt(int rowIndex, int columnIndex) {
int dataIndex = (page-1)*pageSize+rowIndex;
if(dataIndex>=data.size()||dataIndex<0)return null;
else {
Hashtable<String,String> h = data.get(dataIndex);
switch(columnIndex) {
case 0:return h.get("a");
case 1:return h.get("b");
default:return null;
}
}
}

}

}

不想搞了,就这样了,因为对scrollbar的事件监听不太懂,添加数据超过一页时要再添加第2个才换页,你看大致效果是不是你想要的了。
Raymondguo008
2010-05-18 · TA获得超过1634个赞
知道小有建树答主
回答量:887
采纳率:100%
帮助的人:475万
展开全部
我的思路是先在JTable的后蚂唯面插入空字符“”
插到一屏局物老幕的位置,然后再用滚动条滚桐升动。
这样功能就实现了。不过只是初步设想。。。。
提供一些思路吼吼~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
武汉小朱
2010-05-12 · TA获得超过2762个赞
知道小有建树答主
回答量:1212
采纳率:50%
帮助的人:885万
展开全部
能实现这样的滚动吗?
我要研究一下。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式