2017-06-30 15 views
0

ヘッダー名を含む内容がボタンに基づいて動的に追加されるため、0行0列のjTableを作成しました。私はTableCellrendererを使用して列のサイズを変更しています。私のコードでは、すべての列がヘッダー値に基づいて配列されており、さらにすべての列幅の合計がjTable幅の合計よりも小さい場合は、表全体をカバーする必要があります。私はそれをどうやって行うのかわかりませんし、私のコードの問題は何ですか。すべての列は、ヘッダのみに基づいて配置されているjTableのサイズをヘッダーなどの内容に合わせるにはどうすればよいですか?

私のコードで
public void tableresize(JTable table) 
{ 
    for(int i=0;i<table.getColumnCount();i++) 
    { 
    DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); 
    TableColumn col = colModel.getColumn(i); 
    int width = 0; 
    TableCellRenderer renderer = col.getHeaderRenderer(); 
    if (renderer == null) 
    { 
     renderer = table.getTableHeader().getDefaultRenderer(); 
    } 
    Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, i); 
    if(table.getRowCount()>0) 
    { 
     for(int r=0;r<table.getRowCount();r++) 
     { 
     renderer=table.getCellRenderer(r,i); 
     Component comp1=renderer.getTableCellRendererComponent(table,table.getValueAt(r, i),false,false, r, i);  
     if(comp.getPreferredSize().width<comp1.getPreferredSize().width) 
     { 
      width=comp1.getPreferredSize().width; 
     } 
     else 
     { 
      width=comp.getPreferredSize().width; 
     } 
     } 
    } 
    else 
    { 
     width=comp.getPreferredSize().width; 
    } 
    col.setPreferredWidth(width+4);  
    }  
} 

答えて

0

事前に感謝を

まあ値、Iは、行数が0

あるときにのみ、あなたのコードを呼び出す推測します

列の幅を計算するクラスについては、Table Column Adjusterを参照してください。このコードは、データの行を追加/削除したり、セル内のデータを変更するときに動的に呼び出すことができます。

+0

ありがとうございました。できます。しかし、すべての列の幅の合計が全幅よりも小さい場合、すべての列が片側に配置されます(列はテーブルを完全に覆わない) – Previn

+0

@previn、私はそれを試したことはありませんが、この投稿の中で、上記のクラスを提案してください:https://stackoverflow.com/questions/15234691/enabling-auto-resize-of-jtable-only-if-it-fit-viewport/15240806#15240806 – camickr

+0

私はいくつかの特別な条件を使用して上記のクラスを追加します。全幅が小さすぎる場合は、AUTO_RESIZE_ALL_COLUMNSを有効にしてください。ありがとう – Previn

関連する問題