Each column of a JTable
component is represented by the TableColumn
class. The method for setting or changing the width of the column includes the setMinWidth()
, setMaxWidth()
and setPreferredWidth()
. These methods are used to set the minimum, maximum and the preferred width of the column respectively.
When we set only the preferred width of a table column and the container get resized the preferred width will be used to recalculate the new column width to fill the available space, but the preferred width value itself does not change.
TableColumn
object of a table can be obtained by calling table’s getColumnModel()
method which return an instance of TableColumnModel
. After having the TableColumModel
in hand we can get the table’s column by calling the getColumn(int index)
method and passes the index
of the column.
package org.kodejava.swing;
import javax.swing.*;
import javax.swing.table.TableColumn;
import java.awt.*;
public class TableColumnWidthDemo extends JPanel {
public TableColumnWidthDemo() {
initializePanel();
}
public static void showFrame() {
JPanel panel = new TableColumnWidthDemo();
panel.setOpaque(true);
// Creates and configures the JFrame component for our
// program.
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.setTitle("Premiere League - Season 2021-2022");
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(TableColumnWidthDemo::showFrame);
}
private void initializePanel() {
// Defines table's column names.
String[] columnNames = {
"CLUB", "MP", "W", "D", "L", "GF", "GA", "GD", "PTS"
};
// Defines table's data.
Object[][] data = {
{"Chelsea", 8, 6, 1, 1, 16, 3, 13, 19},
{"Liverpool", 8, 5, 3, 0, 22, 6, 16, 18},
{"Manchester City", 8, 5, 2, 1, 16, 3, 13, 17},
{"Brighton", 8, 4, 3, 1, 8, 5, 3, 15},
{"Tottenham", 8, 5, 0, 3, 9, 12, -3, 15}
};
// Defines table's column width.
int[] columnsWidth = {
200, 25, 25, 25, 25, 25, 25, 25, 50
};
// Creates an instance of JTable and fill it with data and
// column names information.
JTable table = new JTable(data, columnNames);
// Configures table's column width.
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, 500));
}
}
Here is the table created by the program above:
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024