Arraylist

13 respostas
rjdiogo

Ola. Estou fazendo um programa que ao clicar no botao inserir ele ativa um evento que grava os dados em uma arraylist o problema que nao estou conseguindo trazer todos os objetos novamente.

o codigo do botao inserir esta assim:

private void jbCriarActionPerformed(java.awt.event.ActionEvent evt) { //pega a data no text field data e assim respectivamente. String data = tfData.getText(); String transacao = tfTransacao.getText(); String creditoS = tfCredito.getText(); //passar o atributo String para double. double credito = Double.parseDouble(creditoS); String debitoS = tfDebito.getText(); //passar o atributo String para double. double debito = Double.parseDouble(debitoS); //instancia na classe fatura Fatura fat = new Fatura(data, transacao, credito, debito); }
Dai, vai para a classe Fatura e ativa o construtor.
O metodo imprime esta assim:

public void mostraArray(){ for (Iterator<Fatura> iterator = fatarray.iterator(); iterator.hasNext();){ Fatura fat = (Fatura) iterator.next(); JOptionPane.showMessageDialog(null, "Data: " + fat.getData() + "\nTransação: " + fat.getTransacao() + "\nCrédito: " + fat.getCredito() + "\nDébito: " + fat.getDebito()); }

Minha arraylist esta criada na classe Fatura assim:

private ArrayList<Fatura> fatarray = new ArrayList<Fatura>();

Sera que alguem pode me ajudar? desde ja obrigado.

13 Respostas

fiaux

Qual o problema exatamente? OBS: Não vi no seu código um lista.add().

victorpsl

Opa!! cabei de perceber algo aqui!!

Você colocou a lista assim!

Minha arraylist esta criada na classe Fatura assim:
private ArrayList fatarray = new ArrayList();

Porém assim ela sempre irá retornar vazia. Precica encher ela.

private ArrayList lista1 = new ArrayList();
list1.addAll(Fatura()); // aqui add os itens nela…!

:smiley:

rjdiogo

Estava usando o metodo:

public void adicionaArray(){ fatarray.addAll(fatarray); System.out.println(fatarray.size()); }
chamava ele dentro do actionperfomed:

private void jbCriarActionPerformed(java.awt.event.ActionEvent evt) { //pega a data no text field data e assim respectivamente. String data = tfData.getText(); String transacao = tfTransacao.getText(); String creditoS = tfCredito.getText(); //passar o atributo String para double. double credito = Double.parseDouble(creditoS); String debitoS = tfDebito.getText(); //passar o atributo String para double. double debito = Double.parseDouble(debitoS); //instancia na classe fatura Fatura fat = new Fatura(data, transacao, credito, debito); fat.mostraArray(); }

mas esta retornando no system.out.println 0 o tamanho do arraylist.

rjdiogo
se eu uso o
public void adicionaArray(){
        fatarray.add(this);
        System.out.println(fatarray.size());
    }

 public void mostraArray(){
        for (Iterator<Fatura> iterator = fatarray.iterator(); iterator.hasNext();){
            Fatura fat = (Fatura) iterator.next(); 
            JOptionPane.showMessageDialog(null, "Data: " + fat.getData() + "\nTransação: " +
                    fat.getTransacao() + "\nCrédito: " + fat.getCredito() + "\nDébito: " +
                    fat.getDebito());
        }

ele me retorna o objeto e retorna no system 1, mas ele nao add mais objetos ele sempre fica no um e nao retorna os objetos anteriores que eu inseri

ViniGodoy

Tá difícil ler os códigos desse tópico.

Vocês podem, por favor, usar a tag code?

Quem ainda não sabe fazer isso, pode ler esse site aqui:
http://www.guj.com.br/posts/list/50115.java

:wink:

Luiz-SP
public void adicionaArray(){  
         fatarray.add(this);  
         System.out.println(fatarray.size());  
    }

Acho que o problema tá aqui, vc tá sempre adicionando this, ou seja, essa instância.

rjdiogo

tentei fazer assim e nao vai tbm

view.java

private void jbCriarActionPerformed(java.awt.event.ActionEvent evt) { //pega a data no text field data e assim respectivamente. String data = tfData.getText(); String transacao = tfTransacao.getText(); String creditoS = tfCredito.getText(); //passar o atributo String para double. double credito = Double.parseDouble(creditoS); String debitoS = tfDebito.getText(); //passar o atributo String para double. double debito = Double.parseDouble(debitoS); //instancia na classe fatura Fatura fat = new Fatura(data, transacao, credito, debito); fat.adicionaArray(fat); fat.mostraArray(); }

Fatura.java

public void adicionaArray(Fatura fat){ fatarray.add(fat); System.out.println(fatarray.size()); }

qnd eu clico no botao inserir continua mostrando so o objeto que acabei de add os anteriores somem.

o System.out.println(fatarray.size()); continua mostrando so 1.

Luiz-SP

Posta a classe toda!! Pra gente dá uma olhada.

rjdiogo

Classe fatura

package sgfc;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JOptionPane;

public class Fatura implements Serializable{

    
    private String data;
    private String transacao;
    private double credito;
    private double debito;
    private ArrayList<Fatura> fatarray = new ArrayList<Fatura>();
    
    public Fatura(String data, String transacao, double credito, double debito){
        setData(data);
        setTransacao(transacao);
        setCredito(credito);
        setDebito(debito); 
        
    }

    public Fatura() {
    }

    public void setCredito(double credito) {
        this.credito = credito;
    }

    public void setData(String data) {
        this.data = data;
    }

    public void setDebito(double debito) {
        this.debito = debito;
    }

    public void setTransacao(String transacao) {
        this.transacao = transacao;
    }

    public double getCredito() {
        return credito;
    }

    public String getData() {
        return data;
    }

    public double getDebito() {
        return debito;
    }

    public String getTransacao() {
        return transacao;
    } 
    
    public void adicionaArray(Fatura fat){
        fatarray.add(fat);
        System.out.println(fatarray.size());
    }
    
    public void mostraArray(){
        for (Iterator<Fatura> iterator = fatarray.iterator(); iterator.hasNext();){
            Fatura fat = (Fatura) iterator.next(); 
            JOptionPane.showMessageDialog(null, "Data: " + fat.getData() + "\nTransação: " +
                    fat.getTransacao() + "\nCrédito: " + fat.getCredito() + "\nDébito: " +
                    fat.getDebito());
        }
        
    }
    
}

View.java

package sgfc;

private void jbCriarActionPerformed(java.awt.event.ActionEvent evt) {                                        
    //pega a data no text field data e assim respectivamente.
    String data = tfData.getText();
    String transacao = tfTransacao.getText();
    String creditoS = tfCredito.getText();
    //passar o atributo String para double.
    double credito = Double.parseDouble(creditoS);
    String debitoS = tfDebito.getText();
    //passar o atributo String para double.
    double debito = Double.parseDouble(debitoS);
    //instancia na classe fatura 
    Fatura fat = new Fatura(data, transacao, credito, debito); 
    fat.adicionaArray(fat);
    fat.mostraArray();
}                                       

   }

A main eu estou achando que esta faltando algo nela...

public static void main(String[] args) throws IOException, ClassNotFoundException {
        launch(SgfcApp.class, args);
        
        GeraArquivo arq = new GeraArquivo();
        arq.openFile();
        arq.addRecords();
        arq.fechaarquivoler();
        
        arq.openFile();
        arq.leregistro();
        arq.fechaarquivoler();
        
        
        
    }
Existi a classe de gera arquivo tbm, mas e so qnd inicia o programaele tras tudo do arquivo pra uma colecao e qnd sai do programa grava a colecao no arquivo.
Luiz-SP

Cara, vc usa uma classe chamada fatura que tem uma array de fatura que recebe uma referência da própria fatura para colocar no array, é um “looping” de referência!!! O que vc quer modelar com isso? Acho que vc quer é uma classe fatura e uma outra classe itemdafatura, não é? Aí vc vai adicionando novos itens da fatura à fatura, para cada item da fatura faça uma nova instância do item da fatura e adicione aos array dentro da classe fatura.

Ps: É só uma sugestão.

rjdiogo

isso mesmo que eu tentei fazer mas nao ta indo tem como me mostrar o codigo?

Luiz-SP

Vê se isso te ajuda, não faria assim, mas tô de saída do trampo, o mais importante é no método jbCriarActionPerformed onde as novas instâncias do ItemDaFatura são criadas.

public class ItemDaFatura{

    //põe aqui os atributos
    // e os gets e sets de acordo com a necessidade da sua aplicação
}
public class Fatura {
   private String data;  
   private String transacao;  
   private double credito;  
   private double debito;  
   private ArrayList<ItemDaFatura> itens = new ArrayList<ItemDaFatura>();  

   public void add(ItemDaFatura item){
      this.itens.add(item);
   }
private void jbCriarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       //pega a data no text field data e assim respectivamente.  
       String data = tfData.getText();  
       String transacao = tfTransacao.getText();  
       String creditoS = tfCredito.getText();  
       //passar o atributo String para double.  
       double credito = Double.parseDouble(creditoS);  
       String debitoS = tfDebito.getText();  
       //passar o atributo String para double.  
       double debito = Double.parseDouble(debitoS);  
       //instancia na classe item da fatura   
       ItemDaFatura item = new ItemDaFatura(data, transacao, credito, debito);
       //Vc deve ter um atributo instância da classe Fatura nesse panel
       this.fatura.add(item)        
   }
E

Diogo,

eu não vi nos seus metodos onde voce insere o objeto Fatura no ArrayList, existe algum outro metodo que faça isso?

Criado 19 de junho de 2008
Ultima resposta 19 de jun. de 2008
Respostas 13
Participantes 6