要在JTable中使表头列横跨两列以显示一个表头,可以使用JTable的TableHeader对象,并自定义一个表头渲染器来实现。
下面是一个示例代码:
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class JTableHeaderSpan extends JFrame {
private JTable table;
public JTableHeaderSpan() {
// 创建表格模型和数据
DefaultTableModel model = new DefaultTableModel(5, 4);
table = new JTable(model);
// 设置表头渲染器
JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new SpanningHeaderRenderer());
// 设置表格的宽度和高度
table.setPreferredScrollableViewportSize(table.getPreferredSize());
// 将表格添加到滚动面板中
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 设置窗口大小和关闭操作
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
public static void main(String[] args) {
new JTableHeaderSpan();
// 自定义表头渲染器
class SpanningHeaderRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// 获取表头的第一行和第二行
JTableHeader header = table.getTableHeader();
Object value1 = header.getColumnModel().getColumn(column).getHeaderValue();
Object value2 = header.getColumnModel().getColumn(column + 1).getHeaderValue();
// 设置表头的文本
setText(value1.toString() + " - " + value2.toString());
// 设置表头的样式
setHorizontalAlignment(CENTER);
setBorder(header.getBorder());
setOpaque(true);
setBackground(header.getBackground());
setForeground(header.getForeground());
return this;
在上面的示例中,我们创建了一个JTable,并使用DefaultTableModel设置了表格的行数和列数。然后,我们获取表头对象并设置了一个自定义的表头渲染器。
自定义的表头渲染器继承自DefaultTableCellRenderer,并重写了getTableCellRendererComponent方法。在该方法中,我们获取了表头的第一行和第二行的文本,并将它们拼接起来作为表头的文本。然后,设置了表头的样式,包括对齐方式、边框、背景色和前景色。
最后,我们将表格添加到一个滚动面板中,并将滚动面板添加到窗口中进行显示。
运行代码,将会显示一个带有表头跨两列的JTable界面。