2

列の幅を設定しようとしましたが、まったく機能しませんでした。何時間も答えを探していました。これが私のコードです。誰が問題を教えてくれますか。前もって感謝します。

    String [] columns = {"Day","StratTime","EndTime","Description"};
    mtbl = new DefaultTableModel();

    tbl = new JTable(mtbl);
    jsPane = new JScrollPane(tbl);

    tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);


    for (int i = 0; i < Timedcolumns.length; i++) {
        mtbl.addColumn(columns[i]);
        tbl.getColumnModel().getColumn(i).setPreferredWidth(100);
    }
4

2 に答える 2

2

の結果、addColumn()すべてJTableの列が再構築される可能性があります。からのスニペットを次に示しますJTable.tableChanged()

public void tableChanged(TableModelEvent e) {
    if (e == null || e.getFirstRow() == TableModelEvent.HEADER_ROW) {
        ...

        if (getAutoCreateColumnsFromModel()) {
    // This will effect invalidation of the JTable and JTableHeader.
            createDefaultColumnsFromModel();
    return;
    }
        ...

TableModelEvent.HEADER_ROWaddColumn()による実行の結果として発火しDefaultTableModelます。addColumn実行しfireTableStructureChangedます:

public void fireTableStructureChanged() {
    fireTableChanged(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
} 

残りの列は によって再作成されたため、最後に追加された列にのみ優先サイズを設定することになりますcreateDefaultColumnsFromModel()

全体として、すべての列が別のループで作成された後で、優先サイズを設定する方がおそらく簡単です。

于 2012-09-24T03:40:41.337 に答える
1

列のPreferredWidthを設定するだけでなく、maxWidthを設定することも役立つことがわかりました。達成しようとしていることに応じて、minWidthを設定することもできます。

 for (int i = 0; i < Timedcolumns.length; i++) {
     mtbl.addColumn(columns[i]);
     tbl.getColumnModel().getColumn(i).setPreferredWidth(100);
     tbl.getColumnModel().getColumn(i).setMaxWidth(100);
 }
于 2012-09-24T03:08:58.807 に答える