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);
}
}
ありがとうございました。できます。しかし、すべての列の幅の合計が全幅よりも小さい場合、すべての列が片側に配置されます(列はテーブルを完全に覆わない) – Previn
@previn、私はそれを試したことはありませんが、この投稿の中で、上記のクラスを提案してください:https://stackoverflow.com/questions/15234691/enabling-auto-resize-of-jtable-only-if-it-fit-viewport/15240806#15240806 – camickr
私はいくつかの特別な条件を使用して上記のクラスを追加します。全幅が小さすぎる場合は、AUTO_RESIZE_ALL_COLUMNSを有効にしてください。ありがとう – Previn