JTable不会显示列标题

Joh*_*ner 76 java swing jtable

我有以下代码来实例化一个JTable:该表提供了正确数量的行和列,但没有列上标题的标志.

public Panel1()
{
    int  nmbrRows;

    setLayout(null);
    setBackground(Color.magenta);
    Vector colHdrs;

    //create column headers

    colHdrs = new Vector(10);
    colHdrs.addElement(new String("Ticker"));

    // more statements like the above to establish all col. titles       

    nmbrRows = 25;
    DefaultTableModel tblModel = new DefaultTableModel(nmbrRows, colHdrs.size());
    tblModel.setColumnIdentifiers(colHdrs);

    scrTbl = new JTable(tblModel);
    scrTbl.setBounds(25, 50, 950, 600);
    scrTbl.setBackground(Color.gray);
    scrTbl.setRowHeight(23);    
    add(scrTbl);

//rest of constructor
...

}
Run Code Online (Sandbox Code Playgroud)

将此与其他制表代码进行比较,我没有看到任何缺失的步骤,但必须缺少某些内容.

Erk*_*lat 167

把你的JTable内心JScrollPane.试试这个:

add(new JScrollPane(scrTbl));
Run Code Online (Sandbox Code Playgroud)

  • 它放入JScrollPane顶级组件的表头(或顶视图或类似名称)当没有顶级组件时,JTable看起来无头.这是设计的. (17认同)
  • 我找到了这个链接,可能有助于解决这个问题:http://blog.danieldee.com/2009/07/showing-jtable-header-without-using.html (9认同)
  • 我以前发现(并使用过)这个解决方案,但我很好奇是否有人知道*为什么*这个有效. (5认同)

sil*_*ver 23

这个答案和接受的答案之间的主要区别在于使用setViewportView()而不是add().

如何把JTableJScrollPane使用Eclipse IDE:

  1. JScrollPane通过设计选项卡创建容器.
  2. 拉伸JScrollPane到所需的大小(适用于绝对布局).
  3. JTable组件拖放到JScrollPane(视口区域)的顶部.

在Structure> Components中,table应该是一个孩子scrollPane. 在此输入图像描述

生成的代码将是这样的:

JScrollPane scrollPane = new JScrollPane();
...

JTable table = new JTable();
scrollPane.setViewportView(table);
Run Code Online (Sandbox Code Playgroud)


小智 8

如前面的答案所述,'正常'方式是将它添加到JScrollPane,但有时你不希望它滚动(不要问我什么时候:)).然后您可以自己添加TableHeader.像这样:

JPanel tablePanel = new JPanel(new BorderLayout());
JTable table = new JTable();
tablePanel.add(table, BorderLayout.CENTER);
tablePanel.add(table.getTableHeader(), BorderLayout.NORTH);
Run Code Online (Sandbox Code Playgroud)