Java 对jtable进行排序后,如何对列进行编号?

Java 对jtable进行排序后,如何对列进行编号?,java,swing,Java,Swing,您好,我正在开发一个Java桌面结果系统,我已经成功地将我的J表与列平均值进行了排序,我仍在尝试在J表排序后为学生提供位置,以便每个学生根据其平均值获得其位置,这就是我到目前为止所做的` //Sorts j Table basing on column average public void checkPosition(){ //Erases column s/no jTable1.getColumnModel().getColumn(0).setMinWidth(0);

您好,我正在开发一个Java桌面结果系统,我已经成功地将我的J表与列平均值进行了排序,我仍在尝试在J表排序后为学生提供位置,以便每个学生根据其平均值获得其位置,这就是我到目前为止所做的`

//Sorts j Table basing on column  average 

public void checkPosition(){
    //Erases column s/no
    jTable1.getColumnModel().getColumn(0).setMinWidth(0);
    jTable1.getColumnModel().getColumn(0).setMaxWidth(0);
    jTable1.getColumnModel().getColumn(0).setWidth(0);

    TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(jTable1.getModel());
    jTable1.setRowSorter(sorter);

    List<RowSorter.SortKey> sortKeys = new ArrayList<>(2000);
    sortKeys.add(new RowSorter.SortKey(jTable1.getColumnCount()-2, SortOrder.DESCENDING));

    //sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
    sorter.setSortKeys(sortKeys);
    positionInsert();
}

public void  positionInsert(){
    //Inserts position at last column "position"
    int pos=1;
    for(int g=0; g<jTable1.getRowCount(); g++){
      DefaultTableModel model = (DefaultTableModel)jTable1.getModel(); 
      model.setValueAt(pos, g, jTable1.getColumnCount()-1);
      pos++;
    }
}
//根据列平均值对j表排序
公共无效检查位置(){
//删除列s/no
jTable1.getColumnModel().getColumn(0.setMinWidth(0);
jTable1.getColumnModel().getColumn(0.setMaxWidth(0);
jTable1.getColumnModel().getColumn(0).setWidth(0);
TableRowSorter-sorter=新的TableRowSorter(jTable1.getModel());
jTable1.设置行分拣机(分拣机);
列表排序键=新数组列表(2000);
添加(新的RowSorter.SortKey(jTable1.getColumnCount()-2,SortOrder.DESCENDING));
//添加(新的行排序器.SortKey(0,排序器.升序));
分拣机设置快捷键(快捷键);
位置插入();
}
公共空白位置插入(){
//在最后一列“位置”插入位置
int pos=1;

对于(int g=0;g当您对表格进行排序时,表格模型中的数据不会改变,只会改变数据在表格中的显示顺序

  DefaultTableModel model = (DefaultTableModel)jTable1.getModel(); 
  model.setValueAt(pos, g, jTable1.getColumnCount()-1);
上面的代码假设模型中的数据与表的顺序相同,这在对表进行排序时是错误的

您需要通过以下表格更新模型中的数据:

  table.setValueAt(pos, g, jTable1.getColumnCount()-1);
现在,表将在更新模型之前将表的行转换为模型的行


或者,如果您想直接更新模型,您需要负责将表格行转换为模型行。这是通过使用JTable的
convertViewToModel(…)
方法完成的。

“使用分类器时,请务必记住转换单元格坐标。”请参阅教程:谢谢,请对注释进行更详细的说明代码请参见:(这就在链接教程中引用行的上方…)