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列宽演示