如何为TableViewer jface做分页?

时间:2013-11-25 07:40:39

标签: java pagination swt tableviewer

我在eclipse中使用TableViewer创建了应用程序。 TableViewer是从org.eclipse.jface.viewers.TableViewer

导入的

该表有很多数据。

当我滚动表格时,我希望看到表格的下一个结果(分页)

你知道这是否有通用的东西吗?

1 个答案:

答案 0 :(得分:1)

以下是一些可以做(我认为)你想要的代码:

private static int page = 0;
private static int pageSize = 10;

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final Table table = new Table(shell, SWT.NONE);
    table.addListener(SWT.MouseWheel, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            if(e.count < 0)
                addItems(table, page++);
            else if(e.count > 0)
                addItems(table, page--);
        }
    });

    addItems(table, page);

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

private static void addItems(Table table, int topIndex)
{
    table.removeAll();
    for(int i = 0; i < pageSize; i++)
    {
        TableItem item = new TableItem(table, SWT.NONE);
        item.setText("Item: " + (i + (topIndex * pageSize)));
    }
}

它会监听MouseWheel上的Table个事件并相应地更新内容。


同样适用于TableViewer而不是Table,只需将Listener替换为:

table.addListener(SWT.MouseWheel, new Listener()
{
    @Override
    public void handleEvent(Event e)
    {
        if(e.count < 0)
            viewer.setInput(ModelProvider.INSTANCE.getItems(page++));
        else if(e.count > 0)
            viewer.setInput(ModelProvider.INSTANCE.getItems(page--));
    }
});