public class Test extends JFrame{
Object[] columnName = {"ssss","sd","sdfsdfs"};
Object[][] names = {{"dfgr","tete","erwew3"},{"werwr","wer","rttht"},
{"sdfeerht","efe","sdf"}};
JTable table = new JTable(names,columnName);
public Test(){
TableColumn mid = table.getColumn(coluName[1]);
TableColumn last = table.getColumn(coluName[2]);
int midWidth = getPreferredWidthForColumn(mid);
int lastWidth = getPreferredWidthForColumn(last);
mid.setMaxWidth = (midWidth);
last.setMinWidth = (lastWidth);
table.sizeColumnsTofit(0); } public int getPreferredWidthForColumn(TableColumn col){
int hw = columnHeaderWidth(col); //header Width 计算列头宽度
int cw = widestCellnColumn(col); //column Width 列宽
return hw>cw?hw:cw;
} public int columnHeaderWidth(TableColumn col){
TableCellRenderer renderer = col.getHeaderRenderer();
Component comp = renderer.getTableCellRendererComponent
(table,col.getHeaderValue(),false,false,0,0);
return comp.getPreferredSize().width; } private int widestCellnColumn(TableColumn col){
int c = col.getModelIndex();
int width=0;
int maxw = 0;
for(int r=0; r<table.getRowCount; i++){
TableCellRenderer renderer = table.getCellRenderer(r,c);
Component comp = renderer.getTableCellRendererComponent
(table,table.getValue(r,c),false,false,r,c);
width = comp.getPreferredSize().width;
maxw = width>maxw?width:maxw;
}
return maxw;
}
}
Object[] columnName = {"ssss","sd","sdfsdfs"};
Object[][] names = {{"dfgr","tete","erwew3"},{"werwr","wer","rttht"},
{"sdfeerht","efe","sdf"}};
JTable table = new JTable(names,columnName);
public Test(){
TableColumn mid = table.getColumn(coluName[1]);
TableColumn last = table.getColumn(coluName[2]);
int midWidth = getPreferredWidthForColumn(mid);
int lastWidth = getPreferredWidthForColumn(last);
mid.setMaxWidth = (midWidth);
last.setMinWidth = (lastWidth);
table.sizeColumnsTofit(0); } public int getPreferredWidthForColumn(TableColumn col){
int hw = columnHeaderWidth(col); //header Width 计算列头宽度
int cw = widestCellnColumn(col); //column Width 列宽
return hw>cw?hw:cw;
} public int columnHeaderWidth(TableColumn col){
TableCellRenderer renderer = col.getHeaderRenderer();
Component comp = renderer.getTableCellRendererComponent
(table,col.getHeaderValue(),false,false,0,0);
return comp.getPreferredSize().width; } private int widestCellnColumn(TableColumn col){
int c = col.getModelIndex();
int width=0;
int maxw = 0;
for(int r=0; r<table.getRowCount; i++){
TableCellRenderer renderer = table.getCellRenderer(r,c);
Component comp = renderer.getTableCellRendererComponent
(table,table.getValue(r,c),false,false,r,c);
width = comp.getPreferredSize().width;
maxw = width>maxw?width:maxw;
}
return maxw;
}
}
TableCellRenderer renderer = col.getHeaderRenderer();
中的renderer 总是空指针
/** 设置表的列宽,使之与表的内容宽度相适应
* @author gh
*/
public class ColWidth {
/** Creates a new instance of ColWitch */
public ColWidth() {
}
/** 设置表的所有列的列宽
* @param table 要设置的表
*/
public static void setAllColWith(javax.swing.JTable table){
if(table != null){
//如果表为空,则不排序
if(table.getRowCount()==0)
return;
int colnumber = table.getColumnCount();
for(int i=0;i<colnumber;i++){
setColWith(table,i);
}
}
}
/** 设置表的列宽
* @param table 要设置的表
* @param colnumber 列号
*/
public static void setColWith(javax.swing.JTable table,int colnumber){
TableColumn mid = table.getColumnModel().getColumn(colnumber);
int midWidth = getPreferredWidthForColumn(table,mid);
mid.setMinWidth(columnHeaderWidth(table,mid)+5);
mid.setPreferredWidth(midWidth+5);
}
/** 取得列的默认宽度
* @param table 表
* @param col 列号
* @return int 列宽
*/
public static int getPreferredWidthForColumn(javax.swing.JTable table,TableColumn col){
int hw = columnHeaderWidth(table,col); //header Width 计算列头宽度
int cw = widestCellnColumn(table,col); //column Width 计算列值宽
return hw>cw?hw:cw;
}
/** 取得表头的宽度
* @param table 表
* @param col 列号
* @return int 列宽
*/
public static int columnHeaderWidth(javax.swing.JTable table,TableColumn col){
TableCellRenderer renderer = col.getHeaderRenderer();
if(renderer == null)
return col.getWidth();
Component comp = renderer.getTableCellRendererComponent(table,col.getHeaderValue(),false,false,0,0);
return comp.getPreferredSize().width;
}
/** 取得表单元的宽度
* @param table 表
* @param col 列号
* @return int 列宽
*/
private static int widestCellnColumn(javax.swing.JTable table,TableColumn col){
int c = col.getModelIndex();
int width=0;
int maxw = 0;
for(int r=0; r<table.getRowCount(); r++){
TableCellRenderer renderer = table.getCellRenderer(r,c);
Component comp = renderer.getTableCellRendererComponent(table,table.getValueAt(r,c),false,false,r,c);
width = comp.getPreferredSize().width;
maxw = width>maxw?width:maxw;
}
return maxw;
}
}