有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java由于某些原因,它不会添加到arrayList中

我有一个奇怪的东西,我试图添加到ArrayList中,但它没有添加,它得到了值和所有内容。请查一下密码,然后给我打电话

我试图添加的类:

public class ManualProductGUI extends JDialog {

private final JPanel contentPanel = new JPanel();
private JTextField barcodeField;
private JTextField idField;
private JTextField nameField;
private JTextField priceField;
private JTextField quantityField;
private JTextField infoField;

BasketContainer bc = new BasketContainer();

private static final long serialVersionUID = 1L;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    try {
        ManualProductGUI dialog = new ManualProductGUI();
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Create the dialog.
 */
public ManualProductGUI() {
    setTitle("Product search");
    setBounds(100, 100, 450, 300);
    getContentPane().setLayout(new BorderLayout());
    contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
    getContentPane().add(contentPanel, BorderLayout.CENTER);
    contentPanel.setLayout(null);


    barcodeField = new JTextField();
    barcodeField.setText("Enter barcode");
    barcodeField.setBounds(10, 11, 157, 20);
    contentPanel.add(barcodeField);
    barcodeField.setColumns(10);
    barcodeField.addMouseListener(new MouseAdapter() 
    {
        public void mouseClicked(MouseEvent e)
        {
            barcodeField.setText("");
        }
    });

    barcodeField.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            int barcode = Integer.parseInt(barcodeField.getText());
            ProductCtr prodCtr = new ProductCtr();

            Product prod = prodCtr.searchProductByBarcode(barcode);
            buildFields(prod);
        }
    });

    infoField = new JTextField();
    infoField.setEditable(false);
    infoField.setBounds(177, 133, 86, 20);
    contentPanel.add(infoField);
    infoField.setColumns(10);
    {
        JPanel buttonPane = new JPanel();
        buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
        getContentPane().add(buttonPane, BorderLayout.SOUTH);
        {
            JButton okButton = new JButton("Add");
            okButton.setActionCommand("Add");
            buttonPane.add(okButton);
            okButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    addToBasket();
                    setVisible(false);
                    dispose();
                }
            });
            getRootPane().setDefaultButton(okButton);
        }
        {
            JButton cancelButton = new JButton("Cancel");
            cancelButton.setActionCommand("Cancel");
            cancelButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    setVisible(false);
                    dispose();
                }
            });
            buttonPane.add(cancelButton);
        }
    }
}

private void addToBasket()
{
    int barcode = Integer.parseInt(barcodeField.getText());
    ProductCtr prodCtr = new ProductCtr();

    Product prod = prodCtr.searchProductByBarcode(barcode);

    bc.addProduct(prod);
}

}

以下是容器类的一部分:

private ArrayList<Product> listOfItems;
public BasketContainer()
{
    listOfItems = new ArrayList<>();
}

public void addProduct(Product prod)
{
    listOfItems.add(prod);
}
public ArrayList<Product> getProducts()
{
    return listOfItems;
}

它会在屏幕上打印信息,但不会添加。我错过什么了吗

谢谢


共 (2) 个答案

  1. # 1 楼答案

    您正在该方法的范围内创建一个新的BasketContainer

    BasketContainer bc = new BasketContainer();
    bc.addProduct(prod);
    

    addToBasket方法应该对它所在类的字段调用addProduct

  2. # 2 楼答案

    每次都要创建一个BasketContainer的新实例,这样新实例就会有一个新的clear ArrayList

    要修复它,您应该在某处创建BasketContainer实例(可能在init块中?)并保存引用,然后使用它添加元素