Java JTable没有出现在JPanel中

Java JTable没有出现在JPanel中,java,swing,jtable,jpanel,jtableheader,Java,Swing,Jtable,Jpanel,Jtableheader,我正在尝试使用DefaultTableModel创建一个带有colName中定义的列标题的JTable,然后将该表添加到JScrollPane,然后添加到JPanel。但是,当我将面板添加到JFrame时,只会显示面板,而不会显示表。我在另一个表中使用了类似的代码,其中一个显示得很好,唯一的区别是列数和变量名 我错过了什么 我的代码: //Column Names final String[] colNames = {"Item", "Count"}; DefaultTa

我正在尝试使用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);

我建议该列被表模型报告的列覆盖。你可以用

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
    ,它在这种情况下毫无意义
  • 背景颜色实际上更多地由视图端口定义,而不是由表或面板定义,直到表被配置为填充空白或有足够的行填充空白

由于您使用的是JScrollPane,而不直接将组件传递给它,因此请尝试创建JScrollPane的新实例,并使用setViewPort()方法传递JTable。e、 g myScrollPane.getViewport().setViewPortView(t)将您和MadProgrammer的解决方案结合起来有效。将您和dinukadev的解决方案结合起来并稍加调整对我有效。我创建了一个JScrollPane实例,将视图设置为表,并将其添加到我的JFrame中。