Java Swing - JTable 未显示在滚动 Pane 中

标签 java swing jtable

我创建了一个类 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;
    }
}

注意:一些方法已被删除,例如 addProduct() 和removeProduct(),因为我觉得它们没有必要。如果您需要查看它们,请询问。

这是我的 Swing 应用程序窗口的initialize() 方法:

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 590, 425);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Cart cart = new Cart();

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    frame.getContentPane().add(tabbedPane, "cell 0 0,grow");

    JPanel cartPanel = new JPanel();
    tabbedPane.addTab("Cart", null, cartPanel, null);
    cartPanel.setLayout(new MigLayout("", "[grow]", "[][grow]"));

    JScrollPane scrollPane = new JScrollPane();
    cartPanel.add(scrollPane, "cell 0 1,grow");

    table = new JTable();
    scrollPane.setViewportView(table);

    JButton btnAdd = new JButton("Add");
    btnAdd.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String[] item = {"Macadamia", "Hazelnut", "Almond", "Peanut", "Walnut", "Pistachio", "Pecan", "Brazil"};
            Double[] price = {2.00, 1.90, 1.31, 0.85, 1.12, 1.53, 1.25, 1.75};

            int choice = (int) (Math.random() * item.length);

            Product p = new Product(item[choice], price[choice]);

            cart.addProduct(p);
            table = cart.getTable();
        }
    });
    cartPanel.add(btnAdd, "flowx,cell 0 0");

    JButton btnRemove = new JButton("Remove");
    cartPanel.add(btnRemove, "cell 0 0");

    JButton btnClear = new JButton("Clear");
    cartPanel.add(btnClear, "cell 0 0");

}

我不确定我是否在这里遗漏了一些东西?以前都是这样操作的吗?我还尝试在 table = cart.getTable(); 打印出值,它似乎接收到的值很好,所以它让我相信它与 Swing initialize() 而不是我的 Cart 类,但以防万一我也发布了 Cart 类。

最佳答案

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

table = new JTable();
scrollPane.setViewportView(table);

我看不到声明的表在哪里,此外表什么也没有包含,没有行没有列,而在actionListener中您使用新实例初始化表:

table = cart.getTable();

但是scrollPane 包含另一个JTable 实例。

关于Java Swing - JTable 未显示在滚动 Pane 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039698/

相关文章:

java - 打包后在 swing 中获取实际的 JFrame 大小

Java - 根据单元格内容更改行颜色

java - 独立的 Java 应用程序在几天后死掉

java - 为什么这不起作用 : attempting to call Ruby GEM from java using jRuby

java - 桌面应用程序中的布局

java - 如何在执行代码之前等待计时器停止?

java - JTable 中对所有 NULL 数据求和的问题

java - 从 JTable 检索数据

Java 在计时器运行前终止

java - 如何修复 : com. android.support :animated-vector-drawable:28. 0.0 中使用的包名称 'android.support.graphics.drawable'