代码之家  ›  专栏  ›  技术社区  ›  Tobias

设置JTable中列的顺序

  •  4
  • Tobias  · 技术社区  · 14 年前

    TableHeader1 | TableHeader2 | TableHeader3
        sth.           sth.          sth.
    

    我知道:

    TableHeader1 -> position 0
    TableHeader2 -> position 1
    TableHeader3 -> position 2
    

    我的问题是,我想以一种特定的方式订购整张桌子,我该怎么做?

    希望你能理解我的问题:-)

    4 回复  |  直到 14 年前
        1
  •  7
  •   Guillaume    14 年前

    可以通过删除所有列并按正确顺序添加来更改列的顺序:

    public static void setColumnOrder(int[] indices, TableColumnModel columnModel) {
        TableColumn column[] = new TableColumn[indices.length];
    
        for (int i = 0; i < column.length; i++) {
            column[i] = columnModel.getColumn(indices[i]);
        }
    
        while (columnModel.getColumnCount() > 0) {
            columnModel.removeColumn(columnModel.getColumn(0));
        }
    
        for (int i = 0; i < column.length; i++) {
            columnModel.addColumn(column[i]);
        }
    }
    
        2
  •  1
  •   Qwerky    14 年前

    好的,这个怎么样。可能有点左场。

    扩展 TableColumn 给你的新班级 position 财产。有it工具 Comparable 使用 比较列。

    DefaultTableColumnModel 储存 表格列

    JTable现在应该根据 . 未经测试,但听起来很有趣,所以我可以稍后再试试。

        3
  •  1
  •   Stephan    9 年前

    基于@Guillaume的答案,我找到了一种方法,无需删除所有列并再次添加它们。

      public static void setColumnOrder(int[] indices, JTable table, TableColumnModel columnModel) {
    
        for (int i = 0; i < indices.length; i++) {
          columnModel.moveColumn(i, table.convertColumnIndexToView(indices[i]));
        }
      }
    

    这对我来说更好,因为使用(SwingX)JXTable时,不可见列的顺序不会被修改。

        4
  •  0
  •   camickr    14 年前