Java JTable Row Sort addSingleSortableColumnListener( @Nonnull RowSorter rowSorter)

Here you can find the source of addSingleSortableColumnListener( @Nonnull RowSorter rowSorter)

Description

Add a RowSorterListener to the rowSorter that prevents multiple columns from being considered while sorting.

License

Open Source License

Parameter

Parameter Description
rowSorter the sorter to add the listener to

Exception

Parameter Description
NullPointerException if rowSorter is null

Return

the added listener

Declaration

public static RowSorterListener addSingleSortableColumnListener(
        @Nonnull RowSorter<? extends TableModel> rowSorter) 

Method Source Code


//package com.java2s;
//License from project: Open Source License 

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.annotation.Nonnull;
import javax.swing.RowSorter;
import javax.swing.RowSorter.SortKey;

import javax.swing.event.RowSorterEvent;
import javax.swing.event.RowSorterListener;
import javax.swing.table.TableModel;

public class Main {
    /**/*ww  w . j a v  a2s . co  m*/
     * Add a RowSorterListener to the rowSorter that prevents multiple columns
     * from being considered while sorting.
     *
     * @param rowSorter the sorter to add the listener to
     * @return the added listener
     * @throws NullPointerException if rowSorter is null
     */
    public static RowSorterListener addSingleSortableColumnListener(
            @Nonnull RowSorter<? extends TableModel> rowSorter) {
        Objects.requireNonNull(rowSorter, "rowSorter must be nonnull.");
        RowSorterListener listener = new RowSorterListener() {
            List<? extends SortKey> priorSortKeys = new ArrayList<>();

            @Override
            public void sorterChanged(RowSorterEvent e) {
                if (e.getType().equals(RowSorterEvent.Type.SORT_ORDER_CHANGED)) {
                    RowSorter<?> source = e.getSource();
                    List<? extends SortKey> newSortKeys = new ArrayList<>(source.getSortKeys());
                    newSortKeys.removeAll(priorSortKeys);
                    if (!newSortKeys.isEmpty()) {
                        priorSortKeys = newSortKeys;
                        source.setSortKeys(priorSortKeys);
                        source.allRowsChanged();
                    }
                }
            }
        };
        rowSorter.addRowSorterListener(listener);
        return listener;
    }
}

Related

  1. applyRowSorter(JTable table)
  2. createTableRowSorter(Class clazz, TableModel model)
  3. filt(ArrayList selectedLevel, String text, TableRowSorter sorter)
  4. getSortOrder(@Nonnull RowSorter rowSorter, int column)