我使用AbstractTableModel
创建一个简单的自定义表,像往常一样使用String[]作为列名,使用Object[][]作为JTable's
行中的内容。但是,我发现很难在列名之前创建一个包含额外行(一个大单元格跨越所有列的一般标题)的表。有人知道吗?
通过使用BorderLayout你可以把TableHeader
放到Container
的底部
add(table, BorderLayout.CENTER);
add(header, BorderLayout.SOUTH);
这取决于你想要的标题。
您可以轻松地在表上方的单独面板中添加JLabel。比如:
JPanel tablePanel = new JPanel( new BorderLayout() );
JLabel label = new JLabel( "Table Title" );
label.setHorizontalAlignment( JLabel.CENTER );
tablePanel.add(label, BorderLayout.NORTH);
JTable table = new JTable(...);
JScrollPane scrollPane = new JScrollPane( table );
tablePanel.add(scrollPane, BorderLayout.CENTER);
如果你想让标题成为列标题的一部分,那就有点棘手了。这样做的一种方法是:
JTable table = new JTable(...)
{
@Override
protected void configureEnclosingScrollPane()
{
super.configureEnclosingScrollPane();
Container parent = getParent();
if (parent instanceof JViewport)
{
parent = parent.getParent();
if (parent instanceof JScrollPane)
{
JScrollPane scrollPane = (JScrollPane)parent;
JPanel columnHeader = new JPanel( new BorderLayout() );
JLabel label = new JLabel( "Table Title" );
label.setHorizontalAlignment( JLabel.CENTER );
columnHeader.add(label, BorderLayout.NORTH);
columnHeader.add(getTableHeader(), BorderLayout.CENTER);
scrollPane.setColumnHeaderView( columnHeader );
}
}
}
};
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );