JTable如何设置列的宽度? 我写一个学生管理系统,里面有列,但是自动默认都是同等长度的,有些列是身份证号码需要很长,但是有些是性别,只是一个字符而已,所以我不希望性别的列和身份证列的长度一样,太占空间了,求大神指教下,有什么方法设置宽度? JDK没查到,没办法! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /** * 自动调整表列宽度 * * @param table 被调整表 * @param addtionalSpace 额外的宽度 * @return 总列宽 */ public static int fitTableColumnsWidth(JTable table, int addtionalSpace) { table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JTableHeader header = table.getTableHeader(); int rowCount = table.getRowCount(); Enumeration columns = table.getColumnModel().getColumns(); int totalColumnWidth = 0; while (columns.hasMoreElements()) { TableColumn column = (TableColumn) columns.nextElement(); int col = header.getColumnModel().getColumnIndex(column.getIdentifier()); int width = (int) table.getTableHeader().getDefaultRenderer() .getTableCellRendererComponent(table, column.getIdentifier() , false, false, -1, col).getPreferredSize().getWidth(); for (int row = 0; row < rowCount; row++) { int preferedWidth = (int) table.getCellRenderer(row, col).getTableCellRendererComponent(table, table.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); } header.setResizingColumn(column); // this line is very important column.setWidth(width + table.getIntercellSpacing().width + addtionalSpace); totalColumnWidth += width + table.getIntercellSpacing().width + addtionalSpace; } return totalColumnWidth; } //取得列的最大长度 private int getPreferredWidthForCloumn(JTable table,int icol){ TableColumnModel tcl = table.getColumnModel(); TableColumn col = tcl.getColumn(icol); int c = col.getModelIndex(),width = 0,maxw = 0; int[] iniCW = new int[table.getColumnCount()]; 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; } // 设定每列的宽度为当列的最大的宽度。 for(int i= 0; i<table.getColumnCount(); i++){ int with = this.getPreferredWidthForCloumn(table,i) + 10; with = iniCW[i] > with ? iniCW[i] : with; table.getColumnModel().getColumn(i).setPreferredWidth(with); } }找到这串代码,却爆Multiple ers at this line 这错误,不知道怎么用! byte[] 数组 转换为 short 类型 java如何自动配置数据源 能用数组当对象么?JTextField x[i] =new JTextField java 奇怪问题 急,帮帮我 解释下核心代码 谢谢 帮忙解释一下 Applet中动态画图的问题 HttpURLConnection问题 关于javabean的使用问题! 关于java取出或插入大量数据时outof memory exeception 新手求问UDP的传输问题
* 自动调整表列宽度
*
* @param table 被调整表
* @param addtionalSpace 额外的宽度
* @return 总列宽
*/
public static int fitTableColumnsWidth(JTable table, int addtionalSpace) {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JTableHeader header = table.getTableHeader();
int rowCount = table.getRowCount(); Enumeration columns = table.getColumnModel().getColumns();
int totalColumnWidth = 0;
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
int width = (int) table.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(table, column.getIdentifier()
, false, false, -1, col).getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++) {
int preferedWidth = (int) table.getCellRenderer(row, col).getTableCellRendererComponent(table,
table.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column); // this line is very important
column.setWidth(width + table.getIntercellSpacing().width + addtionalSpace);
totalColumnWidth += width + table.getIntercellSpacing().width + addtionalSpace;
}
return totalColumnWidth;
}
private int getPreferredWidthForCloumn(JTable table,int icol){
TableColumnModel tcl = table.getColumnModel();
TableColumn col = tcl.getColumn(icol);
int c = col.getModelIndex(),width = 0,maxw = 0;
int[] iniCW = new int[table.getColumnCount()];
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;
}
// 设定每列的宽度为当列的最大的宽度。
for(int i= 0; i<table.getColumnCount(); i++){
int with = this.getPreferredWidthForCloumn(table,i) + 10;
with = iniCW[i] > with ? iniCW[i] : with;
table.getColumnModel().getColumn(i).setPreferredWidth(with);
}
}
找到这串代码,却爆Multiple ers at this line 这错误,不知道怎么用!