JTable没有出现在JPanel中

时间:2013-07-22 02:47:51

标签: java swing jtable jpanel jtableheader

我正在尝试使用DefaultTableModel创建一个带有colName中定义的列标题的JTable,然后将表添加到JScrollPane然后添加到JPanel。但是,当我将面板添加到我的JFrame时,只显示面板,而不是表格。我在另一个表中使用类似的代码,并且一个显示正常,唯一的区别是列数和变量名。

我错过了什么?

我的代码:

    //Column Names
    final String[] colNames = {"Item", "Count"};
    DefaultTableModel dtm = new DefaultTableModel(0, colNames.length);

    //Panel to hold Table
    JPanel j = new JPanel(new BorderLayout());
    j.setBounds(9, 78, 267, 254);

    //Colored to see if the panel has been added
    j.setBackground(Color.RED);

    //Set Column Headers
    dtm.setColumnIdentifiers(colNames);

    //Jtable with model
    JTable t = new JTable(dtm);
    t.setBackground(Color.GREEN);

    t.getTableHeader().setReorderingAllowed(false);
    t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

    t.getColumnModel().getColumn(0).setPreferredWidth(113); 
    t.doLayout();

    j.add(new JScrollPane(t), BorderLayout.CENTER);

1 个答案:

答案 0 :(得分:2)

我建议表格模型报告的那些列会覆盖列。你可以改用...

String[] colNames = {"Item", "Count"};
DefaultTableModel dtm = new DefaultTableModel(colNames, 0);

JPanel j = new JPanel(new BorderLayout());

JTable t = new JTable(dtm);
t.setBackground(Color.GREEN);

t.getTableHeader().setReorderingAllowed(false);
t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

t.getColumnModel().getColumn(0).setPreferredWidth(113); 

j.add(new JScrollPane(t), BorderLayout.CENTER);

,而不是...

如果没有看到你用来将表放在框架上的代码,那么很难进一步评论,但是......

  • 避免使用setBounds,无论如何在这种情况下毫无意义。
  • 实际上,背景颜色将通过视图端口然后是表格或面板进行更多定义,直到表格配置为填充空白空间或具有足够的行来填充空白区域