【问题标题】:JTable Missing Column HeadersJTable 缺少列标题
【发布时间】:2014-03-29 18:02:39
【问题描述】:

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

我通过扩展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);

由于某种原因,我没有看到表格标题。这是我所有的节目:

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

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

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

现在这就是我所看到的:

谁能告诉我为什么我的列标题不见了?我知道这很简单,但我的大脑被炸了,我似乎无法弄清楚。

谢谢。

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

注意垂直滚动条。

【问题讨论】:

    标签: java swing jtable invisible jtableheader


    【解决方案1】:

    变化:

    mainPanel.add(inventoryTable, BorderLayout.CENTER);
    

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

    【讨论】:

    • JTable 是否总是必须位于滚动窗格中?另外,您是否看到我更新的帖子说 mainPanel 驻留在滚动窗格中?
    • 它不一定要在JScrollPane中,但如果你不把它放在一个中,你必须分别添加表头和表格。将它放在JScrollPane 中更容易。另外,如果您的数据超出其容器的范围,您可以滚动。
    • 查看我更新的帖子。你知道为什么按照你的建议做会导致滚动窗格(外滚动窗格)显示垂直滚动条吗?
    猜你喜欢
    • 2013-05-31
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多