我正在JPanel
中放置一个JTable
,但是当我显示时,我看到的是表内容,但没有看到列名。
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));
}
}
方法
(正确的方式)必须把
JTable
放到JScrollPane
,然后JTableHeader
是可见
的从
JTable
获取JTableHeader
(将JPanel
的LayoutManager
更改为BorderLayout
),并在JPanel
中NORTH area
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);
以下语句在您的代码中产生了问题。
this.add(table);
添加表时使用滚动窗格。
add(new JScrollPane(table));
我们为什么要使用JScrollPane
?
正如@OscarRyz在此评论中所述。
它放入 JScrollPane top 组件(或顶部)的表头 视图或类似的东西被命名为 ) 当没有顶部组件时 JTable 显示为无头。这是设计使然。
编辑:另请查看此答案以获取更多详细信息。