我没有得到专栏的名字

时间:2012-12-05 10:55:07

标签: java swing jtable jpanel jtableheader

我在JTable中放置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));
    }
}

3 个答案:

答案 0 :(得分:3)

有两种方式

  • (正确的方式)必须将JTable添加到JScrollPane,然后JTableHeader可见

  • JTableHeader获取JTable(将JPanel LayoutManager更改为BorderLayout)并将NORTH area放入JPanel }}

答案 1 :(得分:2)

1)将JTable换成JScrollPane。像这样:

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);

答案 2 :(得分:1)

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

 this.add(table);

添加表时使用滚动窗格。

 add(new JScrollPane(table));

我们为什么要使用JScrollPane

正如@OscarRyz在comment.

中所述
  

它放入JScrollPane顶级组件(或顶部)的表头   视图或类似的东西被命名)当没有顶级组件   JTable似乎无头。这是设计的。

修改:另请查看此answer了解详情。