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

时间:2014-05-16 15:09:37

标签: 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);
}

}

这是Container类的一部分:

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:11)

每次都创建一个BasketContainer的新实例,以便新实例将有一个新的清除ArrayList。

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

答案 1 :(得分:0)

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

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

addToBasket方法应该在其所在类的字段上调用addProduct