代码之家  ›  专栏  ›  技术社区  ›  tronda Bahribayli

如何实现带滚动表的自定义列排序器(gwt孵化器)

  •  1
  • tronda Bahribayli  · 技术社区  · 16 年前

    我已经实现了我的自定义列排序器,用于对 我桌子上的元素。

        class FileColumnSorter extends SortableGrid.ColumnSorter
        {
            @Override
            public void onSortColumn(SortableGrid sortableGrid, TableModelHelper.ColumnSortList columnSortList,
                                    SortableGrid.ColumnSorterCallback columnSorterCallback)
            ....
        }
    

    初始化FixedWidthGrid时,我执行以下操作:

    FixedWidthGrid dataTable = new FixedWidthGrid(rows, cols);
    dataTable.setSelectionPolicy(SelectionGrid.SelectionPolicy.ONE_ROW);
    dataTable.setColumnSorter(new FileColumnSorter());
    

    滚动表按以下方式初始化:

    FixedWidthFlexTable headerTable = createHeaderTable();
    
    // Calling the lines described above
    FixedWidthGrid fileListGrid = createDataTable
    (currentDescriptorList.size(), 6);
    
    // Combine the components into a ScrollTable
    scrollTable = new ScrollTable(fileListGrid, headerTable);
    scrollTable.setSortPolicy(AbstractScrollTable.SortPolicy.SINGLE_CELL);
    scrollTable.setColumnSortable(0, false);
    scrollTable.setColumnSortable(1, true);
    scrollTable.setColumnSortable(2, true);
    scrollTable.setColumnSortable(3, true);
    scrollTable.setColumnSortable(4, true);
    scrollTable.setColumnSortable(5, false);
    

    当我运行应用程序时,我得到的是内置排序,而不是 自定义排序。我还尝试了以下操作:

    ColumnSorter sorter = new FileColumnSorter();
    FixedWidthGrid dataTable = new FixedWidthGrid(rows, cols) {
        @Override
        public ColumnSorter getColumnSorter()
        {
            return sorter;
        }
    };
    

    以确保我的分拣机得到使用,但我仍然得到相同的 经验。

    更新:添加了filecolumnsorter

    class FileColumnSorter extends SortableGrid.ColumnSorter
    {
        @Override
        public void onSortColumn(SortableGrid sortableGrid,
            TableModelHelper.ColumnSortList columnSortList,
            SortableGrid.ColumnSorterCallback columnSorterCallback)
        {
            final int column = columnSortList.getPrimaryColumn();
    
            final Integer[] originalOrder = new Integer[sortableGrid.getRowCount()];
            for (int i = 0; i < originalOrder.length; i++)
            {
                originalOrder[i] = i;
            }
    
            Arrays.sort(originalOrder, new Comparator<Integer>() {
                public int compare(Integer first, Integer second)
                {
                    Descriptor firstDesc = share.getCurrentDescriptors().get(first);
                    Descriptor secondDesc = share.getCurrentDescriptors().get(second);
    
                    if (firstDesc.getType().equals(secondDesc.getType()))
                    {
                        switch (column)
                        {
                            case 0:
                                return firstDesc.compareTo(secondDesc);
                            case 1:
                                return firstDesc.getName().compareTo(secondDesc.getName());
                            case 2:
                                return ((Long) firstDesc.getSize()).compareTo(secondDesc.getSize());
                            case 3:
                                return firstDesc.getCreated().compareTo(secondDesc.getCreated());
                            case 4:
                                return firstDesc.getModified().compareTo(secondDesc.getModified());
                            default:
                                return firstDesc.compareTo(secondDesc);
                        }
                    }
                    else
                    {
                        return firstDesc.getType() == Descriptor.FileItemType.FOLDER ? 1 : -1;
                    }
                }
            });
    
            int[] resultOrder = new int[originalOrder.length];
            for (int i = 0; i < originalOrder.length; i++)
            {
                if (columnSortList.isPrimaryAscending())
                {
                    resultOrder[i] = originalOrder[i];
                }
                else
                {
                    resultOrder[resultOrder.length - i - 1] = originalOrder[i];
                }
            }
            columnSorterCallback.onSortingComplete(resultOrder);
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   jaxvy    16 年前

    我发现了这个关于如何使用带有gwt孵化器的pagingscrollltable的好例子。也许你可以用这个来代替你自己的: http://zenoconsulting.wikidot.com/blog:17