Ayudenme con este problema usando arraylist en netbenas java?

#1
Hola bakunos, tengo un problemilla al tratar de implementar un programa en java, lo que pasa es que estoy utilizando arraylist en java y tengo algunos errores en mi codigo, espero me puedan ayudar.

BUeno aqui les paso mi codigo:

Clase producto:

En esta clase implemento todos los atributos de mi proyecto, entre ellos son: codigo, descripcion, precio, stock.

Clase ArregloProductos:

Aqui viene lo bueno, lo que pasa es que quiero actualizar con la funcion actualiza unos datos de un formulario que mas adelante les pasare y no sé como arreglar ese codigo para que funcione bien en mi formulario.
Tengo una duda grande en lo que me pueda servir el i en esa funcion y ojala me puedan ayudar al respecto:

Código:
public class ArregloProductos 
{
    // particulariza a objetos de tipo Producto 
    private ArrayList <Producto> a ; 
    Producto pr;
    
    // constructor 
    public ArregloProductos()
    { 
	a = new ArrayList<Producto>(); 
    } 
    public int getN() 
    {
	// retorna el numero de objetos guardados 
	return a.size(); 
    } 
    // métodos de administración 
    public void agrega(Producto p)
    { 
	// guarda un Nuevo producto 
	a.add(p); 
    } 
    
    public void agrega(String cod, String desc, double pre, int st)
    { 
	pr = new Producto(cod, desc, pre, st);
	a.add(pr); 
    }     
    
    public Producto getProducto(int i)
    { 
	// obtiene un producto de la posición i 
	return a.get(i); 
    } 
    
    
    [B]public void actualiza(int i, String cod, String desc, double pre, int st)
    {
	Producto pr = new Producto(cod, desc, pre, st);
	a.set(i, pr); 
    } [/B]
    
    
    // retorna la posición de un producto según su código. 
    public int busca(String codigo)
    { 
	for(int i=0; i<getN(); i++)
	{ 
		if(getProducto(i).getCodigo().equals(codigo)) 
			return i; 
	} 
		return -1; // no lo encontró 
    } 
    
        
    public String buscaModif(String codigo)
    { 
        String linea ="";
        int i = busca(codigo);
        
        linea = getProducto(i).getCodigo() + "," +
                getProducto(i).getDescripcion() + "," +
                getProducto(i).getPrecio() + "," +
                getProducto(i).getStock();
        return linea;
    } 
    
    public void elimina(int p)
    {
	// elimina el producto de la posición p 
	a.remove(p); 
    } 
      
    public String listar()
    {
        String linea = "";
	for(int i=0; i<getN(); i++)
	{ 
		linea = linea + getProducto(i).getCodigo() + "\t" +
                                getProducto(i).getDescripcion() + "\t\t" +
                                getProducto(i).getPrecio() + "\t" +
                                getProducto(i).getStock() + "\n";
        }
        return linea;
    }
}

Clase WinArrayList:

Aqui me voy a ir al grano, tengo un problema con mi boton modificar porque me pide un indice y no sé a que se debe, quizas alguna variable me falta y ojala me puedan ayudar porfavor.

Código:
public class WinArrayList extends javax.swing.JFrame 
{
    ArregloProductos pAp;
    
    public WinArrayList() 
    {
        initComponents();
        pAp = new ArregloProductos();
    }

private void btnGuardarAgregarActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    String cod = txtCodAgregar.getText();
    String desc = txtDescripAgregar.getText();
    double prec = Double.parseDouble(txtPrecioAgregar.getText());
    int st = Integer.parseInt(txtStockAgregar.getText());
    pAp.agrega(cod, desc, prec, st);
    txtCodAgregar.setText("");
    txtDescripAgregar.setText("");
    txtPrecioAgregar.setText("");
    txtStockAgregar.setText("");
    txtCodAgregar.requestFocus();
}                                                 

private void btnListarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String datos = pAp.listar();
    txaDListar.setText(datos);
}                                         

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        String cod = txtCodEliminar.getText();
        int p = pAp.busca(cod);
        if(p>=0)
        {
            pAp.elimina(p);
            JOptionPane.showMessageDialog(null,"Codigo "+cod+", eliminado");
        }
        else
            JOptionPane.showMessageDialog(null,"Codigo "+cod+", no existe");
    }                                           

    [B]private void btnmodificarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        
        //int codi = Integer.parseInt(txtcodmod.getText());
        int cod = Integer.parseInt(txtcodmod.getText());
        String desc = txtdescmod.getText();
        double prec = Double.parseDouble(txtpremod.getText());
        int st = Integer.parseInt(txtstomod.getText());
        pAp.actualiza(cod, cod, desc, prec, st);
        
    }[/B]                                            

    private void btnBuscarModifActionPerformed(java.awt.event.ActionEvent evt) {                                               
        String cod = txtcodmod.getText();
        String datos = pAp.buscaModif(cod);
        String[] dat  = datos.split(",");
        txtcodmod.setText(dat[0]);
        txtdescmod.setText(dat[1]);
        txtpremod.setText(dat[2]);
        txtstomod.setText(dat[3]);
        
    }

Si me ayudan en este tema les agradecere mucho, espero logren encontrar la solucion puesto que lo necesito muy pronto.Salu2
 
#4
Eso es porque el indice que el estas pasando esta mal estas pasando :
int cod = Integer.parseInt(txtcodmod.getText());
pAp.actualiza(cod, cod, desc, prec, st);

lo que debes hacer es obtener la posicion que tiene ese producto en tu lista por ejemplo:

int i=0;
for(Producto p:ArraydeProductos)
{
if(p.cod==cod)
{
modificarproducto();
}
i++;
}
 
Arriba