2013-07-25 13 views
8

内部のデータに応じてJTable列の幅を一致させようとしています。マイコード:内容に合わせてJtable列を自動的に調整します

for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){ 
     int width =0; 
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) { 
     TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column); 
     Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column); 
     width = Math.max (comp.getPreferredSize().width, width); 
     System.out.println(width); 
    } 
    TableColumn col = new TableColumn(); 
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column); 
    System.out.println(width); 
    col.setWidth(width); 
    gui.testsuiteInfoTable.revalidate(); 

    } 
} 

サイズは私が推測正しいが、まだテーブルの列がすべて同じ幅を持っています!テーブルは、GridBagLayoutのScrollPaneに埋め込まれていますか?ご意見ありがとうございます。あなたは余分なライブラリを使用することができる場合

+2

[link](http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/) –

+0

もご覧ください。 –

答えて

5
col.setWidth(width); 

読むために求めている正確に何している、あなたはメソッド「packAll()」で、JXTableを持っあり(https://java.net/projects/swingx) Swingxを試してみてくださいJTable APIを使用し、How to Use Tablesのリンクに従ってください。このチュートリアルでは、setPreferredWidth(...)を使用して列の幅を示唆しています。

Table Column Adjusterもチェックアウトしてください。この解決策は、列ヘッダーの幅も考慮に入れることができます。

+0

ありがとうございます。この問題は、JTableをJScrollPaneに追加しないとsetWidthなどが機能しない場合に発生します。 –

19

これはあなたが必要とするすべてである:

JTable table = new JTable(){ 
    @Override 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      Component component = super.prepareRenderer(renderer, row, column); 
      int rendererWidth = component.getPreferredSize().width; 
      TableColumn tableColumn = getColumnModel().getColumn(column); 
      tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth())); 
      return component; 
     } 
    }; 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

の表は、内容に合わせて自動的に各列幅を調整します。サイズ変更をトリガーするタイミングを制御する必要はありません。

+0

これはうまくいきますが、追加しない場合はserialVersionUIDを求める警告が表示されます。 +1。 –

+0

テーブルの列が大きな値にリサイズされると、現在の列の状態に合わせて縮小されていないように見えます。 – lordoku