列のサイズが 10px を超えないようにしたい。チェックボックスしか入っていないので小さくしたい。
ここで JTable をインスタンス化します。
private void initDataSearchResultTable()
{
dataSearchResultTable = new JTable();
dataSearchResultTable.setSelectionBackground(new Color(0xaaaaff));
dataSearchResultTable.setFillsViewportHeight(true);
dataSearchResultTable.setRowSelectionAllowed(true);
dataSearchResultTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
dataSearchResultTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
ここでテーブルのテーブルモデルを設定します(ユーザーがボタンをクリックしたとき):
void updateDataSearchTableModel(CachedRowSet cachedRowSet)
{
TableModel tableModel = dataSearchResultTable.getModel();
if (tableModel instanceof DataSearchTableModel) {
((DataSearchTableModel) tableModel).updateModel(cachedRowSet);
} else {
tableModel = new DataSearchTableModel(cachedRowSet);
dataSearchResultTable.setModel(tableModel);
this.setCellRendererForDataSearchTable();
((DataSearchTableModel) tableModel).structureChanged();
}
}
メソッド structureChanged() で、メソッド fireTableStructureChanged() を呼び出します。これにより、ブール列がチェック ボックスとしてレンダリングされます。
次に、0 列と 1 列の幅を設定して、サイズ変更可能にしようとしています。それは動作しません:
private void setCellRendererForDataSearchTable()
{
DataSearchResultTableCellRenderer cellRenderer = new DataSearchResultTableCellRenderer();
TableColumnModel columnModel = dataSearchResultTable.getColumnModel();
for (int i = 0; i < columnModel.getColumnCount(); i++) {
TableColumn column = columnModel.getColumn(i);
if (i == 0) {
column.setMaxWidth(15);
column.setResizable(false);
} else if (i == 1) {
column.setMaxWidth(30);
column.setResizable(false);
}
column.setCellRenderer(cellRenderer);
}
}
私のレンダラーは、選択したセルの境界線のみを設定します。私のテーブルモデルはもっと興味深いです:
public DataSearchTableModel(CachedRowSet cachedRowSet)
{
this.cachedRowSet = cachedRowSet;
updateModel(this.cachedRowSet);
}
public void updateModel(CachedRowSet cachedRowSet)
{
try {
metaData = this.cachedRowSet.getMetaData();
this.numOfCols = metaData.getColumnCount();
// Retrieve the number of rows.
this.cachedRowSet.beforeFirst();
this.numOfRows = 0;
while (this.cachedRowSet.next()) {
this.numOfRows++;
}
this.cachedRowSet.beforeFirst();
} catch (SQLException e) {
e.printStackTrace();
}
}
しかし、これは機能しません。これらの列はまだサイズ変更されていて、幅が間違っていますか?
ありがとう!