Java 自动调整JTable列宽的大小
我需要我的JTable自动调整列宽以适应内容。我发现这门课很有用。但是有一个小问题。假设我有5个专栏,它们的内容很短。在这种情况下,如果我使用自动调整器,它会根据其内容设置前四列的宽度,并将所有剩余的空间提供给最后一列。请看这个例子 最后一列,Java 自动调整JTable列宽的大小,java,swing,jtable,tablecolumn,Java,Swing,Jtable,Tablecolumn,我需要我的JTable自动调整列宽以适应内容。我发现这门课很有用。但是有一个小问题。假设我有5个专栏,它们的内容很短。在这种情况下,如果我使用自动调整器,它会根据其内容设置前四列的宽度,并将所有剩余的空间提供给最后一列。请看这个例子 最后一列,Balance给出了所有多余的空间。但是如果我需要给中间的一列空间呢。在上述情况下,我需要将该空间分配给第三列,name。我试图修改tableColumnAdjustrator类的adjustColumns()方法。但我无法让它工作 我尝试了column
Balance
给出了所有多余的空间。但是如果我需要给中间的一列空间呢。在上述情况下,我需要将该空间分配给第三列,name
。我试图修改tableColumnAdjustrator
类的adjustColumns()
方法。但我无法让它工作
我尝试了column.setPreferredWidth()
和column.setWidth()
来更改列大小。但这似乎并没有改变什么。如何有效地更改JTable
的列大小。如果对我的主要问题有其他选择或直接的答案,那就更好了。谢谢 您可以尝试下一步:
public void resizeColumnWidth(JTable table) {
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++) {
int width = 15; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width +1 , width);
}
if(width > 300)
width=300;
columnModel.getColumn(column).setPreferredWidth(width);
}
}
没有选项可以自动调整一列比另一列大的大小 也许你可以这样做:
tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);
这将允许您在第1列中添加额外的空间。只有在第一次显示表格时才会添加此额外空间
另一种选择是使用:
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
这将按比例为每列分配额外的空间。您可以这样做:
JPanel jp = new JPanel();
jp.add(table);
jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part
setAutoResizeMode()将告诉您的表如何调整大小。您应该尝试使用所有不同的选项来查看差异,在我的例子中,我想专门调整两列的大小,并让它决定如何调整所有其他列
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);
colModel.getColumn(2).setPreferredWidth(400);
这真是太棒了,最后用上了。我在setPreferredColumnModel调用之前添加了一个类似于“if(width>300)width=300”的检查,它修复了一些显示很长数据字段的情况。我建议将其添加到答案中——你也可以提取出最小/最大宽度(这将是非常棒的可选参数——事实上,我现在要在我的代码库中这样做。)(我希望我知道什么时候将这样的内容编辑到别人的答案中是很酷的……因为这不是CW,我讨厌在未经允许的情况下更改内容。)嗨,@BillK可自由编辑/添加代码。。。如果有,请提供屏幕截图我是否也可以对标题进行求值,以便其文本不会被截断?@Xerus Add
width=Math.max(width,table.getColumnModel().getColumn(column.getPreferredWidth())代码>在上面代码的第9行之后,用于计算标题。正如预期的那样,工作非常完美!
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);
colModel.getColumn(2).setPreferredWidth(400);