0

列のサイズが 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();
        }
    }

しかし、これは機能しません。これらの列はまだサイズ変更されていて、幅が間違っていますか?

ありがとう!

4

3 に答える 3