java - JTable - 排序不适用于格式化数字

标签 java swing sorting jtable integer

我有一个包含 3 列的简单 JTable。数字变大了,所以我通过在其中加上逗号来格式化它们,即 100,000。但是,这样做时,我的表格排序不起作用。

我该如何解决这个问题?

package tables;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class mainwindow extends JPanel {

 public static void main(String[] args) {
        Object[][] data = {
            {"75,500", "Don't Let Go", new Integer(179)},
            {"121,343", "Photograph", new Integer(29)},
            {"32,323", "Hash Pipe", new Integer(186)}
        };
        Object[] columns = {"Track #", "Title", "Length"};
        DefaultTableModel model = new DefaultTableModel(data,columns) {
            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return Integer.class;
                    default:
                        return String.class;
                }
            }
        };
        JTable table = new JTable(model);
        JScrollPane scroll = new JScrollPane(table);
        table.setAutoCreateRowSorter(true);
        JOptionPane.showMessageDialog(null, scroll);
    }
}

Screenshot of my application

最佳答案

你不会对第一列进行数字排序,因为数据是字符串而不是数字,我建议你将数据保留为整数,

   Object[][] data = {
        {75500, "Don't Let Go", new Integer(179)},
        {121343, "Photograph", new Integer(29)},
        {32323, "Hash Pipe", new Integer(186)}
    };

创建并使用具有所需格式的新 cellRender:

  table.setDefaultRenderer(Integer.class, new DefaultTableCellRenderer() {
     private NumberFormat numberFormat = new DecimalFormat("#,###,###");
     @Override
     protected void setValue(Object aValue) {
        Integer value = (Integer) aValue;
        super.setValue(numberFormat.format(value));
     }
  });

关于java - JTable - 排序不适用于格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211076/

相关文章:

c - 合并排序的更好方法是什么?递归函数还是非递归函数?

java - 在 Java Future 上使用 isDone 和 Cancel 轮询而不是阻塞 get

java - JUnit/Mockito 测试用例在 Debug模式下通过但在运行模式下未通过

java - 在 Android 中播放视频

java - 这个java代码背后的逻辑是什么

java - Swing:选项卡菜单与 Firefox/Thunderbird 设置类似,标题位于图标下方

java - 将对象放在 x,y 位置 JFrame

java - JList 类型不是通用的;它不能用参数 <String> 参数化

python - 卡片排序列表

delphi - 如何使用多个比较器在 TObjectList<> 中进行类似于 Excel 的按 A 排序,然后按 B 排序