# 表格行高列宽调整
# 方案1
增加行高:使用 setRowHeight
方法。
设置列宽:使用 getColumnModel().getColumn(i).setPreferredWidth(width)
方法。
调整表头字体:已经设置较大字体,可保持不变。
举例:在 table.setModel(...)
之后添加
table.setRowHeight(30); // 增加行高
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 关闭自动缩放
// 设置列宽
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
table.getColumnModel().getColumn(2).setPreferredWidth(150);
# 方案2
开启自动换行(默认 JTable
不能换行,但可以用 JTextArea
作为渲染器)。
# 步骤 1:创建自定义的单元格渲染器
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
public class MultiLineTableCellRenderer extends JTextArea implements TableCellRenderer {
public MultiLineTableCellRenderer() {
setLineWrap(true); // 开启自动换行
setWrapStyleWord(true); // 断行时按单词换行
setOpaque(true); // 设置背景透明
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(value == null ? "" : value.toString()); // 设置单元格文本
setFont(table.getFont()); // 继承表格的字体
// 根据内容调整行高
int fontHeight = getFontMetrics(getFont()).getHeight();
int textLength = getText().length();
int columnWidth = table.getColumnModel().getColumn(column).getWidth();
int lineCount = (int) Math.ceil((double) textLength * fontHeight / columnWidth);
int rowHeight = Math.max(lineCount * fontHeight, table.getRowHeight());
table.setRowHeight(row, rowHeight);
return this;
}
}
# 步骤 2:在 initTable
方法中应用该渲染器
在 initTable
方法中,创建 JTable
后,给所有列设置这个渲染器:
void initTable(String text) {
String sql = "select * from tb_car";
try {
ResultSet set = SqlUtil.query(sql, new Object[]{text});
table.setModel(new DefaultTableModel(SqlUtil.getSetArrays(set), headers));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
// 设置行高和自动换行渲染器
table.setRowHeight(30); // 基础行高
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 关闭自动缩放
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumnModel().getColumn(i).setPreferredWidth(150); // 适当调整列宽
table.getColumnModel().getColumn(i).setCellRenderer(new MultiLineTableCellRenderer()); // 设置换行渲染器
}
}
← 实现滚动字幕