Java Swing-JTable未显示在滚动窗格中

Java Swing-JTable未显示在滚动窗格中,java,swing,jtable,Java,Swing,Jtable,我创建了一个类Cart,里面是一个JTable和两个ArrayList。由于某些原因,我的JTable未显示 这是我的购物车课程: class Cart { ArrayList<Product> products = new ArrayList<>(); // Holds the products themselves ArrayList<Integer> quantities = new ArrayList<>(); // Hol

我创建了一个类
Cart
,里面是一个JTable和两个ArrayList。由于某些原因,我的JTable未显示

这是我的购物车课程:

class Cart {
    ArrayList<Product> products = new ArrayList<>(); // Holds the products themselves
    ArrayList<Integer> quantities = new ArrayList<>(); // Holds the quantities themselves
    JTable prdTbl = new JTable(); // The GUI Product Table
    DefaultTableModel prdTblModel = new DefaultTableModel(); // The Table Model
    Object[] columns = {"Description","Price","Quantity","Total"}; // Column Identifiers
    DecimalFormat fmt = new DecimalFormat("$#,##0.00;$-#,##0.00"); // Decimal Format for formatting USD ($#.##)

    Cart() {
        setTableStyle();
    }

    void renderTable() {        
        // Re-initialize the Table Model
        this.prdTblModel = new DefaultTableModel();

        // Set the Table Style
        setTableStyle();

        // Create a row from each list entry for product and quantity and add it to the Table Model
        for(int i = 0; i < products.size(); i++) {
            Object[] row = new Object[4];

            row[0] = products.get(i).getName();
            row[1] = products.get(i).getPrice();
            row[2] = quantities.get(i);
            row[3] = fmt.format(products.get(i).getPrice() * quantities.get(i));

            this.prdTblModel.addRow(row);
        }

        this.prdTbl.setModel(this.prdTblModel);
    }

    void setTableStyle() {
        this.prdTblModel.setColumnIdentifiers(columns);
        this.prdTbl.setModel(this.prdTblModel);
        this.prdTbl.setBackground(Color.white);
        this.prdTbl.setForeground(Color.black);
        Font font = new Font("Tahoma",1,22);
        this.prdTbl.setFont(font);
        this.prdTbl.setRowHeight(30);
    }

    JTable getTable() {
        renderTable(); // Render Table
        return this.prdTbl;
    }
}

我不确定我是否遗漏了什么?在过去,它像这样工作得很好?我还尝试在
table=cart.getTable()处打印值,它似乎很好地接收到了值,因此它让我相信它与Swing
initialize()
有关,而不是与我的
Cart
类有关,但以防我也发布了
Cart
类。

您确定添加了正确的表吗?您的代码显示:

table = new JTable();
scrollPane.setViewportView(table);
我看不到表的声明位置,更多的表不包含任何内容,不包含行和列,而在actionListener中,您使用新实例初始化表:

table = cart.getTable();

但是滚动窗格包含JTable的另一个实例。

您确定添加了正确的表吗?您的代码显示:

table = new JTable();
scrollPane.setViewportView(table);
我看不到表的声明位置,更多的表不包含任何内容,不包含行和列,而在actionListener中,您使用新实例初始化表:

table = cart.getTable();

但是scrollPane保存了JTable的另一个实例。

看起来您从未将购物车与cartPanel相关联;我认为你的问题在于:

 JPanel cartPanel = new JPanel();
你制作了新的面板,但从来没有把你的购物车挂在上面。否则看起来不错


祝你好运

看起来您从未将购物车与cartPanel相关联;我认为你的问题在于:

 JPanel cartPanel = new JPanel();
你制作了新的面板,但从来没有把你的购物车挂在上面。否则看起来不错


祝你好运

如果您想按照@ugo的建议将initialize()中的新表与购物车表关联起来,也可以这样做。很高兴@TommyYamakaitis,很高兴我能提供帮助!如果您想按照@ugo的建议将initialize()中的新表与购物车表关联起来,也可以这样做。很高兴@TommyYamakaitis,很高兴我能提供帮助!在你发布之前我才意识到。谢谢@ugoI在你发布之前才意识到这一点。谢谢@ugo