如何对JTable按指定列排序?以quantity列降序排列为例
实现JTable按quantity列降序排序的最简方案
仅需要修改3处代码即可完成需求,无需引入额外依赖:
- 修正TableModel的列类型识别,避免数字类型列按字符串逻辑排序,同时开启表格自带的排序功能
找到你初始化dtmProduct和tblProduct的代码段,替换为以下内容:dtmProduct = new DefaultTableModel(){ // 重写该方法让排序器正确识别各列数据类型,保证排序逻辑正确 @Override public Class<?> getColumnClass(int columnIndex) { switch(columnIndex){ case 0: return Integer.class; // 条码列为整数类型 case 6: return Integer.class; // 数量列为整数类型 case 7: return Float.class; // 零售价列为浮点类型 default: return String.class; // 其余列默认为字符串类型 } } }; dtmProduct.setColumnIdentifiers(new Object[] {"Barcode", "Device Name", "Device Type", "Brand", "Colour", "Connectivity", "Quantity", "Retail Price", "Add. Info."}); tblProduct.setModel(dtmProduct); // 开启JTable自带的自动排序功能 tblProduct.setAutoCreateRowSorter(true); - 加载完所有表格数据后设置默认排序规则
找到你遍历productList添加完所有行的代码之后,补充以下代码即可默认按数量列降序排序:// 获取表格的排序器实例 DefaultRowSorter sorter = (DefaultRowSorter) tblProduct.getRowSorter(); // 设置排序规则:第6列(数量列,索引从0开始计数)按降序排序 sorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(6, SortOrder.DESCENDING))); // 触发排序 sorter.sort(); - 可选说明:如果不需要页面加载后默认排序,仅希望用户点击「Quantity」列头即可手动切换升/降序,仅做第一步修改即可,无需添加第二步的代码。
补充提示:如果编译时提示找不到相关类,需导入以下包:
import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.table.DefaultRowSorter; import java.util.Arrays;
内容的提问来源于stack exchange,提问作者Elee
相关产品推荐
相关产品推荐

