我正在使用AbstractTableModel
创建一个简单的自定义表,像往常一样,String []用于列名,而Object [] []用于JTable's
行。但是,我发现很难在列名称之前创建一个包含额外行(一个大单元格跨越一般标题的所有列)的表格。有没有人有任何想法?
答案 0 :(得分:1)
使用BorderLayout,您可以将TableHeader
放在Container
add(table, BorderLayout.CENTER);
add(header, BorderLayout.SOUTH);
答案 1 :(得分:1)
这取决于你想要的总标题。
您可以在单独的面板中轻松地在表格上方添加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 );