How can I persist data using Arraylist?

Asked

Viewed 423 times

1

I need my Arraylist data structure to be visible in more than one method of my Products class.

This is how I’m working:

package estoque;

import java.awt.Component;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.util.ArrayList;

public class produtos {

   public static void cadastro() {
      ArrayList<String> Produto = new ArrayList<>();
      JTextField field1 = new JTextField();
      JTextField field2 = new JTextField();
      JTextField field3 = new JTextField();
      Object[] message = {
         "Código:", field1,
         "Descrição:", field2,
         "Quantidade:", field3};
      Component parent = null;
      int option = JOptionPane.showConfirmDialog(parent, message, "Cadastro de Produtos", JOptionPane.OK_CANCEL_OPTION);
      if (option == JOptionPane.OK_OPTION) {
         String codigo = field1.getText();
         String descricao = field2.getText();
         String quantidade = field3.getText();

         if (codigo.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Por favor, preencha o campo Código!");
            cadastro();
         } else if (descricao.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Por favor, preencha o campo Descrição!");
            cadastro();
         } else if (quantidade.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Por favor, preencha o campo Quantidade!");
            cadastro();
         } else {
            Produto.add(codigo + ' ' + descricao + ' ' + quantidade);
            JOptionPane.showMessageDialog(null, "Produto cadastrado com sucesso!");
            System.out.println(Produto);
            Estoque.menu();
         }
      }
   }

   public static void listar() {
      JOptionPane.showMessageDialog(null, " Código - Descrição - Produto\n", "Lista de Produtos", 1);
   }

}

From the menu I access Registration and I register a product that will be stored in ArrayList<String> Produto = new ArrayList<>();

Then I go back to another class called Menu and select the List Option, which accesses the list method();

In this method the Arraylist is not global, therefore I cannot access it, as I can make it global to perform the reading in this method ?

  • Place it as a class attribute: private ArrayList<String> Produto = new ArrayList<>();

  • Then the Product Arraylist is not visible in the method, as I would call it ?

  • 2

    Now that I’ve noticed it’s static. Just add it like this: private static ArrayList<String> Produto = new ArrayList<>(); thus becomes a static class parameter, not an instance parameter.

  • That’s what it was! puts as an answer and adds an explanation, so that I can mark it as correct, I had forgotten Static, kind of got a confusion in java when it comes to this!

  • 1

    I believe this question will not be useful to anyone since my problem was just a flaw in semantics in forgetting the use of Static

  • Behold this question.

Show 1 more comment

1 answer

1


You can define the ArrayList<String> as an attribute of the class, so that the scope of the whole class has access to the value, so you can use and change in any method of the same:

public class Produtos {
  private List<String> produtos;

  public void cadastro() {
    produtos = new ArrayList<String>();
    produtos.add("seu produto");
  }

  public void listar() {
    //Os produtos estarão disponíveis aqui também, caso a lista esteja inicializada
    if (produtos != null) {
      for (String prod : produtos) {
        System.out.println(prod);
      }
    }
  }

}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.