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