有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用setAutoCreateRowSorter时获取列排序顺序(true)?

我有一个JTable,在那里我设置了table.setAutoCreateRowSorter(true);。我的主要目标是使一行始终位于顶部,而不考虑任何列排序顺序。我做的第一件事是修改我的cell数据类型的compareTo方法,这样它就可以理解一个表示“比其他任何东西都少”的标志,并因此总是将该项排序到顶部。不幸的是,这使得给定的行始终位于顶部或底部,这取决于列的排序顺序。因此,当排序顺序为降序时,我需要设置单元格,使其有效值大于任何其他值。唯一的问题是我不知道如何获得列排序顺序

关于this page,一个建议的答案是

if (myTable.getRowSorter().getSortKeys().get(column).getSortOrder == SortOrder.ASCENDING) {
    ...
}

不幸的是,getSortKeys()总是返回一个空列表。我回到原点了。我还考虑过添加一个RowSorterListener,但它似乎是一个侦听器,用于更改排序器时,而不是更改排序顺序时

有什么帮助吗?谢谢

编辑:下面的代码演示了我的部分问题。注意系统。出来println,结果总是零。我想获得列的行排序顺序,但似乎不存在

package tablecolumn;

import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.table.AbstractTableModel;

public class Tablecolumn extends JFrame {
    JScrollPane scroll;
    JTable table;
    MyTableModel model;

    static String[] columnnames = new String[] {"A", "B", "C"};

    public class MyTableModel extends AbstractTableModel {
        public List<List<String>> entries;

        MyTableModel() {
            entries = new ArrayList<List<String>>();
            for (int i=0; i<5; i++) {
                List<String> cols = new ArrayList<String>();
                cols.add("X" + i);
                cols.add("Y" + i);
                cols.add("Z" + i);
                entries.add(cols);
            }
        }

        @Override
        public int getRowCount() {
            return entries.size();
        }

        @Override
        public int getColumnCount() {
            return columnnames.length;
        }

        @Override
        public Object getValueAt(int r, int c) {
            List<? extends RowSorter.SortKey> rsk = table.getRowSorter().getSortKeys();
            System.out.println(rsk.size());
            return entries.get(r).get(c);
        }

        @Override
        public Class getColumnClass(int c) { 
            return String.class; 
        }

        @Override
        public String getColumnName(int c) { return columnnames[c]; }        

        @Override
        public boolean isCellEditable(int row, int col) { return false; }

    }

    public Tablecolumn() {
        scroll = new JScrollPane();
        model = new MyTableModel();
        table = new JTable();

        table.setModel(model);
        table.setAutoCreateRowSorter(true);
        table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        table.getTableHeader().setReorderingAllowed(false);
        table.setColumnSelectionAllowed(false);
        table.setRowSelectionAllowed(true);

        scroll.setViewportView(table);

        scroll.setMinimumSize(new Dimension(200, 200));
        scroll.setPreferredSize(new Dimension(800, 600));

        GroupLayout layout2 = new GroupLayout(this.getContentPane());
        this.setLayout(layout2);
        layout2.setVerticalGroup(
            layout2.createSequentialGroup()
                .addComponent(scroll)
        );
        layout2.setHorizontalGroup(
            layout2.createParallelGroup()
                .addComponent(scroll)
        );               

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Tablecolumn().setVisible(true);
            }
        });
    }
}

共 (0) 个答案