如何解决自动/最适合JTable列,但拉伸最后一列
| 我有以下JTable(实际上是Netbeans的ETable)。它跨越了它所在的容器-我想保留它,而不使用JTable.AUTO_RESIZE_OFF 我想像下面那样以编程方式适应它,调整每列的大小以适合仅单元格内容或列标题文本,并让最右边的列填充剩余的空间。我怎样才能做到这一点 ?解决方法
您可以关闭自动调整大小。在这种情况下,列将根据内容自动调整大小。但是在这种情况下,如果列的总宽度小于表的宽度,则右侧将出现空白。如果更大,将显示水平滚动条。
您可以使用
TableColumn.setPreferredWidth
为每列指定首选宽度。 Swing将尝试根据此分配额外的空间。但这也不能保证。
, 您必须将autoResize设置为OFF(setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
),但是您还需要一个辅助方法来调整列的大小。
这是在扩展JTable的自定义类中,但是您可以轻松地引用现有的JTable:
public void resizeColumnWidth() {
int cumulativeActual = 0;
int padding = 15;
for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) {
int width = 50; // Min width
TableColumn column = columnModel.getColumn(columnIndex);
for (int row = 0; row < getRowCount(); row++) {
TableCellRenderer renderer = getCellRenderer(row,columnIndex);
Component comp = prepareRenderer(renderer,row,columnIndex);
width = Math.max(comp.getPreferredSize().width + padding,width);
}
if (columnIndex < getColumnCount() - 1) {
column.setPreferredWidth(width);
cumulativeActual += column.getWidth();
} else { //LAST COLUMN
//Use the parent\'s (viewPort) width and subtract the previous columbs actual widths.
column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual);
}
}
}
每当添加行时,调用resizeColumnWidth()。
(可选)向表中添加侦听器,以便在调整表本身的大小时也可以调整列的大小:
public MyCustomJTable() {
super();
addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
@Override
public void ancestorResized(HierarchyEvent e) {
super.ancestorResized(e);
resizeColumnWidth();
}
});
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。