我无法对列进行排序



我有一个网格,但我只想要 2 列和排序选项,因为我这样做?

  RowSorter newSorter = new TableRowSorter(table.getModel());
        newSorter.setSortKeys(sortKeys);
        table.setRowSorter(newSorter);

我用了这个

但我只想要 2 列和排序选项

查看DefaultRowSortersetSortable(...)方法。您可以禁用不希望排序的列。

你几乎掌握了答案......

基本上,只要您(或表)想要更改排序(方向或列),就会调用 setSortKeys 方法。

您可以做的是重写 TabelRowSorter#setSortKeys 方法并根据需要筛选列表

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class RowSorterTest {
    public static void main(String[] args) {
        new RowSorterTest();
    }
    public RowSorterTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }
                DefaultTableModel model = new DefaultTableModel(new String[]{"B1", "B2", "A1", "A2"}, 0);
                for (int index = 0; index < 100; index++) {
                    model.addRow(new Object[]{rnd(), rnd(), rnd(), rnd()});
                }
                JTable table = new JTable(model);
                RowSorter sorter = new MyRowSorter(model);
                table.setRowSorter(sorter);
                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
    public class MyRowSorter extends TableRowSorter<TableModel> {
        public MyRowSorter(TableModel model) {
            super(model);
        }
        @Override
        public void setSortKeys(List<? extends SortKey> sortKeys) {
            List<SortKey> newKeys = new ArrayList<>(sortKeys.size());
            for (SortKey key : sortKeys) {
                if (key.getColumn() >= 0 && key.getColumn() <= 1) {
                    newKeys.add(key);
                }
            }
            super.setSortKeys(newKeys); 
        }
    }
    protected int rnd() {
        return (int)(Math.random() * 100d);
    }
}

现在,我很确定,将这个概念扩展到可配置的级别并不需要太多,所以你可以添加"有效"的列索引......

您还可以更进一步,只允许在单个方向上对选定的列进行排序......

相关内容

  • 没有找到相关文章

最新更新