java - 在 JTable 中对 int 进行排序

标签 java swing jtable tablerowsorter

我想在 JTable 中对包含 int 的列进行排序。我将 TableRowSorter 与排序顺序 SortOrder.ASCENDING 一起使用。但不知何故,它并不是我真正想要的。

我想要的:

enter image description here

我得到的:

enter image description here

问题是什么?我该如何解决?

这是 SSCCE:

ResultGUI.java

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;

public class ResultGUI {

    protected static JTable ranglisteTable = new JTable();

    public static void main(String[] args){

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 368, 316);
        frame.setLayout(null);

        //MODEL
        Vector<Object> data = new Vector<Object>();     
        Vector<Object> row = new Vector<Object>();
        row.addElement(3);      
        data.addElement(row);
        Vector<Object> row2 = new Vector<Object>();
        row2.addElement(2);     
        data.addElement(row2);
        Vector<Object> row3 = new Vector<Object>();
        row3.addElement(1);     
        data.addElement(row3);
        Vector<Object> row4 = new Vector<Object>();
        row4.addElement(22);        
        data.addElement(row4);
        Vector<Object> row5 = new Vector<Object>();
        row5.addElement(13);        
        data.addElement(row5);              
        Vector<String> columnNames = new Vector<String>();
        columnNames.addElement("Points");   
        TableModel model = new DefaultTableModel(data, columnNames);        
        for(int i = 0; i < 10; i++){
            ranglisteTable.setRowHeight(i, 30);
        }

        ranglisteTable.setBounds(109, 0, 128, 277);
        ranglisteTable.setModel(model);

        //SORTING
        TableRowSorter<TableModel> sorter = new TableRowSorter<>(ranglisteTable.getModel());        
        ranglisteTable.setRowSorter(sorter);
        List<RowSorter.SortKey> sortKeys = new ArrayList<>();
        sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
        sorter.setSortKeys(sortKeys);
        sorter.sort();

        frame.add(ranglisteTable);

        frame.setVisible(true);
    }
}

最佳答案

你试试这段代码

import java.util.ArrayList;
import java.util.Date;
import javax.swing.DefaultRowSorter;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;

public class ResultGUI extends JFrame
{
    public ResultGUI()
    {
        String[] columnNames = {"points"};
        Object[][] data =
        {{ new Long(1)}, { new Long(2)},{ new Long(9) },{ new Long(4)}
        };

        final JTable table = new JTable(data, columnNames)
        {

            public Class getColumnClass(int column)
            {
                // Lookup first non-null data on column
                for (int row = 0; row < getRowCount(); row++) 
                {
                    Object o = getValueAt(row, column);

                    if (o != null)
                        return o.getClass();
                }

                return Object.class;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.setAutoCreateRowSorter(true);
        // DefaultRowSorter has the sort() method
        DefaultRowSorter sorter = ((DefaultRowSorter)table.getRowSorter()); 
        ArrayList list = new ArrayList();
        list.add( new RowSorter.SortKey(0, SortOrder.ASCENDING) );
        sorter.setSortKeys(list);
        sorter.sort();
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        ResultGUI frame = new ResultGUI();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

关于java - 在 JTable 中对 int 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439581/

相关文章:

java - ServletException in :/layouts/menu. jsp null' 在 jsp 页面中存在重定向链接的部分

java - 由于某种原因,鼠标事件在java中不起作用

java - 在 JLabel 中显示 JComboBox 所选项目

java - 如何使用 CardLayout 调整 JPanel 的大小

java - JTable 不添加第一个单元格为空

java - 选中 JTable 中的复选框时的通知

java - 如何通过模拟其中的一种或多种方法来测试 Akka Actor 的功能

java - 如何减少 for 循环中需要大量执行时间的迭代?

Java - 使用 fireTableDataChanged() 更新 JTable;

java - 试图计算运行时间的进程在 0 纳秒内执行。如何?