私はクライアントのためにcostum JTableを開発しています。JTable、TableModel、TableColumnModel - 奇妙なことが起こっている
テーブルモデルを開始したときに、私はちょうど列モデルを完成させました。テーブルモデルの列に関連するほとんどの関数は、実際には列モデルの関数のエイリアスです。
とにかく、何か本当に奇妙なことが起こった。誰かが私に助けてくれることを願っています:
JTableは列を正しく示しています。つまり、getColumnCountとgetColumnNameは正しく動作しています。
行数が正しく表示されています。つまり、getRowCountは正常に動作しています。
テーブルモデルの«getColumnCount»が列モデルのgetColumnCountの値を返すため、各行のセル数が正しく表示されます。
各行の最初のセルの値が正しい:
あなたの大部分のように、getValueAtには何か問題があると私は推測しました。だから、テーブルがレンダリングされた後、そのテーブルへの呼び出しをハードコードすることにしました。そして、値は正しいものに戻った。
デバッグ後、getValueAt(rowIndex、columnIndex)の代わりに 'getValueAt(rowIndex、0)'を呼び出すJTableが見つかりました。
誰もがこれを手伝ってくれますか?敬具...
テーブルモデル
/**
* Returns the value to be displayed for this column at this row index.
* @param rowIndex
* @param columnIndex
* @return
*/
public Object getValueAt(int rowIndex, int columnIndex) {
System.out.println(String.format("LOS_TableModel: getValueAt(%d, %d)", rowIndex, columnIndex));
LOS_TableCell cell = this.getCell(columnIndex, rowIndex);
if(cell == null) return null;
else return cell.value;
}
/**
* Returns the LOS_TableCell at the specified JTable indexes
* @param index
* @return
*/
public LOS_TableCell getCell(int columnIndex, int rowIndex) {
for(Object o_row : this.rows) {
if(o_row.getClass() == LOS_TableRowGroup.class) {
LOS_TableRowGroup row = (LOS_TableRowGroup) o_row;
LOS_TableCell cell = row.getCell(columnIndex, rowIndex);
if(cell != null) return cell;
}
else {
LOS_TableRow row = (LOS_TableRow) o_row;
for(LOS_TableCell cell : row.cells)
if(cell.column.tableIndex == columnIndex && cell.row.tableIndex == rowIndex) return cell;
}
}
return null;
}
/**
* Returns the number of visible columns
* @return
*/
public int getColumnCount() {
int result = this.columnModel.getColumnCount();
System.out.println("LOS_TableModel : getColumnCount() : " + result);
return result;
}
/**
* Returns the total of displayed rows
* @return
*/
public int getRowCount() {
int rowCount = 0;
for(LOS_TableRow row : this.rows) {
if(row.visible) rowCount += 1;
if(row.getClass() == LOS_TableRowGroup.class)
rowCount += ((LOS_TableRowGroup) row).getDisplayedRowCount();
}
return rowCount;
}
列モデル
/**
* Returns an enumeration of columns.
* @return
*/
public Enumeration<TableColumn> getColumns() {
Vector<TableColumn> columns = new Vector<TableColumn>();
for(LOS_TableColumn column : this.columns)
if(column.visible) columns.add((TableColumn)column);
return columns.elements();
}
/**
* Used by the JTable to get a column index.
* @param columnIdentifier
* @return
*/
public int getColumnIndex(Object columnIdentifier) {
System.out.println("LOS_ColumnModel: getColumnIndex(" + columnIdentifier + ")");
for(LOS_TableColumn column : this.columns)
if(column.getIdentifier().equals(columnIdentifier)) return column.tableIndex;
return -1;
}
/**
* Return a column using its JTable index
* @param columnIndex
* @return
*/
public TableColumn getColumn(int columnIndex) {
System.out.println("LOS_ColumnModel : getColumn(" + columnIndex + ")");
for(LOS_TableColumn column : this.columns)
if(column.tableIndex == columnIndex) return column;
throw new IndexOutOfBoundsException("" + columnIndex);
}
そして、そのハードコードされたテスト。
System.out.println("=========> " + model.getValueAt(1, 2)); // Outputs 'Cell 1,2'
ありがとう、私はそこに起こっていることについて多くのことを考えました。 – flash
@flash、origianlのポスターでさえなかったとしても、あなたは答えを嬉しく思っています:) – camickr
これは本当に役に立ちました。ありがとう – ali