Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以使为on-topic

6年前关闭。



Improve this question





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

该表有很多数据。

当我在表格上滚动时,我想查看表格的下一个结果(分页)

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

最佳答案

这是一些代码,可以完成您想要的(我认为):

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--));
    }
});

10-08 01:45