jtable的某列如何能自动调整宽度,适合其值 有一些列比如日期,是固定格式的,如何能这些列自动适应其宽度,设置setMaxWidth、setPreferredWidth太死了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.awt.BorderLayout;import java.util.Random;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.JTableHeader;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;public class TableColumnAutoAdjustDemo{ public static void main(String[] args) { JTable table = new JTable(3, 5); Random random = new Random(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { table.setValueAt(getRandomString(random.nextInt(10)), i, j); } } table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); adjustTableColumnWidths(table); JScrollPane sp = new JScrollPane(table); JFrame f = new JFrame("自动调整宽度"); f.getContentPane().add(sp, BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static String getRandomString(int len) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < len; i++) { buf.append('M'); } return buf.toString(); } private static void adjustTableColumnWidths(JTable table) { JTableHeader header = table.getTableHeader(); int rowCount = table.getRowCount(); TableColumnModel cm = table.getColumnModel(); for (int i = 0; i < cm.getColumnCount(); i++) { TableColumn column = cm.getColumn(i); int width = (int)header.getDefaultRenderer() .getTableCellRendererComponent(table, column.getIdentifier() , false, false, -1, i).getPreferredSize().getWidth(); for(int row = 0; row<rowCount; row++){ int preferedWidth = (int)table.getCellRenderer(row, i).getTableCellRendererComponent(table, table.getValueAt(row, i), false, false, row, i).getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); } column.setPreferredWidth(width+table.getIntercellSpacing().width); } table.doLayout(); }} 楼主你可真够懒的private static void adjustTableColumnWidths(JTable table) { JTableHeader header = table.getTableHeader(); //表头 int rowCount = table.getRowCount(); //表格的行数 TableColumnModel cm = table.getColumnModel(); //表格的列模型 for (int i = 0; i < cm.getColumnCount(); i++) { //循环处理每一列 TableColumn column = cm.getColumn(i); //第i个列对象 int width = (int)header.getDefaultRenderer().getTableCellRendererComponent(table, column.getIdentifier(), false, false, -1, i).getPreferredSize().getWidth(); //用表头的绘制器计算第i列表头的宽度 for(int row = 0; row<rowCount; row++){ //循环处理第i列的每一行,用单元格绘制器计算第i列第row行的单元格宽度 int preferedWidth = (int)table.getCellRenderer(row, i).getTableCellRendererComponent(table, table.getValueAt(row, i), false, false, row, i).getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); //取最大的宽度 } column.setPreferredWidth(width+table.getIntercellSpacing().width); //设置第i列的首选宽度 } table.doLayout(); //按照刚才设置的宽度重新布局各个列} 清单文件 [疑问] 变量是一个整数,如何统计它的二进制位数? Java中,如何实现多文档界面中内部窗体与菜单间的联系以及如何设置背景图片详解 Java 两个不同Frame之间的变量怎么传递? java 中中文输入问题 求助电梯模拟仿真程序!! 高薪招聘兼职JAVE程序员! 最后一句有错么? 各位领导,见者有分!!!谢谢光临!! 请问为什么在websphere3.5中创建应用服务器时要指定虚拟主机?应用服务器与指定虚拟主机的关系? 只能输入4位半角数字的JTextField中输入全角字符时会消去已有的数字。 关于从oracle9i数据库取数据乱码的问题。求强人解答!谢谢!
import java.util.Random;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;public class TableColumnAutoAdjustDemo
{
public static void main(String[] args)
{
JTable table = new JTable(3, 5);
Random random = new Random();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
table.setValueAt(getRandomString(random.nextInt(10)), i, j);
}
}
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
adjustTableColumnWidths(table);
JScrollPane sp = new JScrollPane(table); JFrame f = new JFrame("自动调整宽度");
f.getContentPane().add(sp, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
private static String getRandomString(int len)
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < len; i++) {
buf.append('M');
}
return buf.toString();
} private static void adjustTableColumnWidths(JTable table)
{
JTableHeader header = table.getTableHeader();
int rowCount = table.getRowCount();
TableColumnModel cm = table.getColumnModel(); for (int i = 0; i < cm.getColumnCount(); i++) {
TableColumn column = cm.getColumn(i);
int width = (int)header.getDefaultRenderer()
.getTableCellRendererComponent(table, column.getIdentifier()
, false, false, -1, i).getPreferredSize().getWidth();
for(int row = 0; row<rowCount; row++){
int preferedWidth = (int)table.getCellRenderer(row, i).getTableCellRendererComponent(table,
table.getValueAt(row, i), false, false, row, i).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
column.setPreferredWidth(width+table.getIntercellSpacing().width);
}
table.doLayout();
}
}
{
JTableHeader header = table.getTableHeader(); //表头
int rowCount = table.getRowCount(); //表格的行数
TableColumnModel cm = table.getColumnModel(); //表格的列模型 for (int i = 0; i < cm.getColumnCount(); i++) { //循环处理每一列
TableColumn column = cm.getColumn(i); //第i个列对象
int width = (int)header.getDefaultRenderer().getTableCellRendererComponent(table, column.getIdentifier(), false, false, -1, i).getPreferredSize().getWidth(); //用表头的绘制器计算第i列表头的宽度
for(int row = 0; row<rowCount; row++){ //循环处理第i列的每一行,用单元格绘制器计算第i列第row行的单元格宽度
int preferedWidth = (int)table.getCellRenderer(row, i).getTableCellRendererComponent(table, table.getValueAt(row, i), false, false, row, i).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth); //取最大的宽度
}
column.setPreferredWidth(width+table.getIntercellSpacing().width); //设置第i列的首选宽度
}
table.doLayout(); //按照刚才设置的宽度重新布局各个列
}