我在 JTable 中添加和移动多个列时遇到问题。
我在每列和列标题中都有某些日期的数据。移动本身一切都很好,但是在我添加并移动下一列后它会重置。
我没有改变项目中任何其他地方的任何列的位置。
这是输出示例(仅标题):
| 5 | 6 | 7 | 8 |
添加标题“1”并移动到索引 0:
| 1 | 5 | 6 | 7 | 8 |
添加标题“2”并移动到索引 1:
| 5 | 2 | 6 | 7 | 8 | 1 |
添加标题“3”并移动到索引 2:
| 5 | 6 | 3 | 7 | 8 | 1 | 2 |
以及一些跟进它的代码(“<<<<”指定的问题位置):
 public void recalculateTableDates(String start, String end, Double defaultValue) {     
    String startDate = getTblDetails().getColumnName(1);
    String endDate = getTblDetails().getColumnName(getTblDetails().getColumnCount()-1);
    int sMonth = Integer.parseInt(start.substring(4, 6));
    int sYear = Integer.parseInt(start.substring(0, 4));
    int eMonth = Integer.parseInt(end.substring(4, 6));
    int eYear = Integer.parseInt(end.substring(0, 4));
            // gets distance between 2 values
            // (Used elsewhere in project, working as intended)
    int duration = getDuration(sMonth, sYear, eMonth, eYear);
    Vector<Double> data = new Vector<Double>(duration);
    for(int i = 0; i < data.size(); i++) {
         data.addElement(defaultValue);
    }
    for(int i = 1, mCount = sMonth, yCount = sYear; i < duration+1; i++) {
        String yyyymm = String.valueOf(yCount)+String.format("%02d", mCount++);
                    // Adds to beginning - PROBLEM HERE <<<<<<<<<<<<<<<<<<<<<<<<<<
        if(yyyymm.compareTo(startDate) < 0) {
            getModel().addColumn(yyyymm, data);
            moveColumn(tblDetails.getColumnCount()-1, i);
        } else if(yyyymm.compareTo(endDate) > 0) {
                              // THIS IF STATEMENT WORKING AS INTENDED
                  getModel().addColumn(yyyymm, data);
        }
        if(mCount > 12) {
            mCount = 1;
            yCount++;
        }
    }
    int length = getTblDetails().getColumnCount()-1;
    System.out.println(duration + " " + length);
    if(length > duration) {
        TableColumnModel colModel = getTblDetails().getColumnModel();
        for(int i = length; i > duration; i--) {
            colModel.removeColumn(colModel.getColumn(i));
        }
    }
    this.revalidate();
    this.repaint();
}
    // Moves column in table
 private void moveColumn(int column, int targetIndex) {
      getTblDetails().moveColumn(column, targetIndex);
 }
我意识到代码有点乱。一直在跑来跑去试图改变这个和那个来修复它。
有谁知道它为什么这样做?我对 JTable 没有丰富的经验。