2

我将 aJTable放在 a 中JPanel,但是当我显示时,我看到的是表格内容,但看不到列名。

public class Neww extends JPanel
{
    Connection conn = null;
    Statement st;
    DefaultTableModel model = new DefaultTableModel(new Object[][] {
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " }
    }, new Object[] {
        "ItemName",
        "No of items"
    });

    JTable table = new JTable(model);
    TableColumn ItemName = table.getColumnModel().getColumn(0);
    JComboBox comboBox = new JComboBox();
    Neww()
    {
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.add(table);

        comboBox.addItem("Spoon");
        comboBox.addItem("Plate");
        comboBox.addItem("Mixer");
        comboBox.addItem("Glass");
        ItemName.setCellEditor(new DefaultCellEditor(comboBox));
    }
}
4

3 回答 3

3

有两种方法

  • (正确的方式)必须放在JTableJScrollPane然后JTableHeader是可见的

  • 从(将s更改为JTableHeader)并放入JTableJPanelLayoutManagerBorderLayoutNORTH areaJPanel

于 2012-12-05T10:59:44.050 回答
2

1)包裹你的JTableJScrollPane。像这样:

JTable table=...;

JPanel container = new JPanel();

JScrollPane jsp=new JScrollPane(table);

container.add(jsp);

2)getTableHeader()在需要的地方使用并添加它(通常是北方):

...

JTableHeader header = table.getTableHeader();

JPanel container = new JPanel(new BorderLayout());

// Add header at NORTH position
container.add(header, BorderLayout.NORTH);

//Add table below header
container.add(table, BorderLayout.CENTER);
于 2012-12-05T11:00:05.923 回答
1

以下语句在您的代码中产生问题。

 this.add(table);

添加表格时使用滚动窗格。

 add(new JScrollPane(table));

为什么要使用JScrollPane

正如@OscarRyz 在此评论中所述。

它放入 JScrollPane 顶部组件(或顶部视图或类似名称)中的表头当没有顶部组件时,JTable 显示为无头。这是设计使然。

编辑:另请查看此答案以获取更多详细信息。

于 2012-12-05T12:10:04.197 回答