Java 由于某些原因,它不会添加到arrayList
我有一个奇怪的东西,我试图添加到ArrayList,但它没有添加,它得到了值和所有内容。请核对密码,然后给我打电话 我试图添加的类:Java 由于某些原因,它不会添加到arrayList,java,arraylist,Java,Arraylist,我有一个奇怪的东西,我试图添加到ArrayList,但它没有添加,它得到了值和所有内容。请核对密码,然后给我打电话 我试图添加的类: public class ManualProductGUI extends JDialog { private final JPanel contentPanel = new JPanel(); private JTextField barcodeField; private JTextField idField; private JTextField name
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;
}
私有数组列表项;
公共篮子容器()
{
listOfItems=newarraylist();
}
公共产品(产品生产)
{
项目列表。添加(产品);
}
公共阵列列表getProducts()
{
返回项目列表;
}
它会在屏幕上打印出信息,但不会添加。我错过什么了吗
谢谢。您每次都会创建一个新的
BasketContainer
实例,这样新实例就会有一个新的清晰的ArrayList
要修复它,您应该在某个地方创建
BasketContainer
实例(可能在init块中?)并保存引用,然后使用它添加元素。您正在方法范围内创建一个新的BasketContainer
BasketContainer bc = new BasketContainer();
bc.addProduct(prod);
addToBasket
方法应该在它所在类的字段上调用addProduct
。您也需要将泛型类型添加到ListoItems的实例化中ListoItems=new ArrayList()
谢谢您的回答,但是我完全按照您所说的做了,我将BasketContainer
放在一个Init块中,但这并没有解决我的问题。也许你可以再多提些建议?谢谢。您能添加更改后的代码吗?还有,addToBasket方法在哪里?我编辑了我的帖子,添加了整个班级。通知你,因为我不知道当我的帖子被编辑时它是否会通知你。你是如何阅读列表的?在哪里?我在你的代码中没有看到它。从容器类(我编辑并添加了如何读取它的方法)。很抱歉一开始没有说得那么具体。