JTable组件的每一列均由TableColumn类表示。用于设置或改变列的宽度,该方法包括setMinWidth(),setMaxWidth()和setPreferredWidth()。这些方法分别用于设置列的最小,最大和首选宽度。
当我们仅设置表列的首选宽度并且容器得到调整大小时,首选宽度将用于重新计算新的列宽度以填充可用空间,但是首选宽度值本身不会更改。
TableColumn可以通过调用getColumnModel()返回的实例的表的方法来获得表的对象TableColumnModel。接手之后,TableColumModel我们可以通过调用getColumn(int index)方法并传递列的来获取表的index列。
package org.nhooo.example.swing;
import javax.swing.*;
import javax.swing.table.TableColumn;
import java.awt.*;
public class TableColumnWidthDemo extends JPanel {
public TableColumnWidthDemo() {
initializePanel();
}
private void initializePanel() {
// 定义表的列名。
String[] columnNames = {
"TEAM", "P", "W", "D", "L", "GS", "GA", "GD", "PTS"
};
// 定义表的数据。
Object[][] data = {
{ "Liverpool", 3, 3, 0, 0, 7, 0, 7, 9 },
{ "Tottenham", 3, 3, 0, 0, 8, 2, 6, 9 },
{ "Chelsea", 3, 3, 0, 0, 8, 3, 5, 9 },
{ "Watford", 3, 3, 0, 0, 7, 2, 5, 9 },
{ "Manchester City", 3, 2, 1, 0, 9, 2, 7, 7 }
};
// 定义表格的列宽。
int[] columnsWidth = {
200, 25, 25, 25, 25, 25, 25, 25, 50
};
// 创建JTable的实例并用数据填充它,
// 列名称信息。
JTable table = new JTable(data, columnNames);
// 配置表的列宽。
int i = 0;
for (int width : columnsWidth) {
TableColumn column = table.getColumnModel().getColumn(i++);
column.setMinWidth(width);
column.setMaxWidth(width);
column.setPreferredWidth(width);
}
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
this.setLayout(new BorderLayout());
this.add(scrollPane, BorderLayout.CENTER);
this.setPreferredSize(new Dimension(500, 200));
}
public static void showFrame() {
JPanel panel = new TableColumnWidthDemo();
panel.setOpaque(true);
// 创建并配置我们的JFrame组件
// 程序。
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.setTitle("English Premiere League - 2018/2019");
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showFrame();
}
});
}
}这是上面的程序创建的表:

JTable列宽演示