JTable缺少列标题

时间:2014-03-29 18:02:39

标签: java swing jtable invisible jtableheader

非常简单的问题。请不要打击我。 :)

我通过扩展AbstractTableModel创建了一个表模型,如下所示:

public class InventoryTableModel extends AbstractTableModel {
    private static final String[] COLUMN_NAMES = { "On Sale", "Name", "Selling Price", "Description" };

    @Override
    public int getColumnCount() {
        return COLUMN_NAMES.length;
    }

    @Override
    public int getRowCount() {
        return 0;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return COLUMN_NAMES[columnIndex];
      }    

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return null;
    }    
}

接下来,我使用此表格模型创建JTable并在包含布局BorderLayout的面板中显示它:

JTable inventoryTable = new JTable(new InventoryTableModel());        
mainPanel.add(inventoryTable, BorderLayout.CENTER);

请注意,mainPanel最终会在滚动窗格中结束:

scrollPane.setViewportView(mainPanel);

出于某种原因,我没有看到表头。这是我的所有节目节目:

Missing Column Headers

(注意,空格是表的位置。)

为了确保正确放置表,我修改了getRowCount方法以返回1:

@Override
public int getRowCount() {
    return 1;
}

现在这就是我所看到的:

Missing Column Headers - 1 Row

有谁能告诉我为什么我的列标题丢失了?我知道这很简单,但是我的脑子很油腻,我似乎无法弄明白。

谢谢。

更新,基于Josh M's answer我将表格放在滚动窗格中。这有效,但这就是我的应用程序现在的样子:

Table Inside Scroll Pane

请注意垂直滚动条。

1 个答案:

答案 0 :(得分:1)

变化:

mainPanel.add(inventoryTable, BorderLayout.CENTER);

mainPanel.add(new JScrollPane(inventoryTable), BorderLayout.CENTER);