Trying to get the sorter positon to retain after a table refresh

假如想象 提交于 2019-12-02 04:49:12

You can get the current sort keys from the DefaultRowSorter. So the basic logic would be:

  1. getSortKeys()
  2. refresh TableModel
  3. setSortKeys(...)

Edit:

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;

public class TableSortSSCCE extends JPanel
{
    private String[] columnNames = {"First Name",
                                    "Last Name",
                                    "Sport",
                                    "# of Years",
                                    "Vegetarian"};

    private Object[][] data =
    {
        {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
        {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
        {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
        {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)},
        {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
    };

    private JTable table;


    public TableSortSSCCE()
    {
        super(new BorderLayout());

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model);
        table.setPreferredScrollableViewportSize( table.getPreferredSize() );
        table.setAutoCreateRowSorter(true);

        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);

        JButton clear = new JButton("Clear Table");
        clear.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                DefaultTableModel model = (DefaultTableModel)table.getModel();
                model.setRowCount(0);
            }
        });
        add(clear, BorderLayout.NORTH);


        JButton reload = new JButton("Reload Table");
        reload.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                TableRowSorter sorter = (TableRowSorter)table.getRowSorter();
                List<? extends RowSorter.SortKey> sortKeys = sorter.getSortKeys();

                DefaultTableModel model = new DefaultTableModel(data, columnNames);
                table.setModel(model);
                table.setAutoCreateRowSorter( true );

                sorter = (TableRowSorter)table.getRowSorter();
                sorter.setSortKeys( sortKeys );
            }
        });
        add(reload, BorderLayout.SOUTH);
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("TableSortSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        TableSortSSCCE newContentPane = new TableSortSSCCE();
        frame.setContentPane(newContentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!