0

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 の経験が豊富ではありません。

4

1 に答える 1