[RESOLVIDO]Chamar lista através de interface gráfica!

10 respostas
guisantogui

Gente estou postando aqui pq no básico não conseguiram me ajudar!

Tenho o seguinte, uma interface gráfica que quando eu clicar no seu botão “PROXIMO” ele deve ir para um proximo registro que eu guardo na minha ArrayList, e aparecer todos os dados da pessoa na tela!

Meu problema, chamar essa lista que está instanciada na minha classe cadastro de pessoas!
Já tentei inumeras formas, olhei a API completa e o google não me ajudou muito, isso parece ser simples, mas ainda naum tive a ideia de como faze-lo!

Brigado pela ajuda! :wink:

10 Respostas

rmendes08

Ué cara, é só manter um contador, quando clicar em Próximo você incrementa o contador, pega o objeto do ArrayList e joga os valores dos campos do objeto para os componentes de interface, qual a dificuldade nisso ?

guisantogui

Eu jah tentei fazer isso, mas tipo ele naum encontra a lista q eu criei na classe CadPessoas!!

Naum sei pq, jah criei a classe bonitinha com tratamento de excessões e tudo, mas ele continua estourando a IndexOutOfBoundsException!
:confused:

S

posta uma porção do código, tem 100000 formas de fazer isso, até da para fazer enquanto jogo video game .

S

guisantogui:
Gente estou postando aqui pq no básico não conseguiram me ajudar!

Já tentei inumeras formas, olhei a API completa e o google não me ajudou muito, isso parece ser simples, mas ainda naum tive a ideia de como faze-lo!

Brigado pela ajuda! :wink:

e muitas vezes o segredo não esta em ler a API, mas sim em saber juntar os poucos conhecimentos da api que nos temos e bolar o algoritmo certo

guisantogui

Olha a classe Cad Pessoas

public class CadastroDePessoas{

    private List<Pessoa> lista;
    private int posicao = -1;

    public CadastroDePessoas(){
        lista = new ArrayList<Pessoa>();
    }

    public boolean adiciona(Pessoa p){
        return lista.add(p);
    }

    public Pessoa prox() throws NoSuchElementException, IndexOutOfBoundsException{
        return lista.get(++posicao);
    }

    public Pessoa ant() throws NoSuchElementException, IndexOutOfBoundsException{
        return lista.get(--posicao);
    }

    public Pessoa ultimoDaLista() throws NoSuchElementException, IndexOutOfBoundsException{
        return lista.get(lista.size()-1);
    }

    public Pessoa primeiroDaLista() throws NoSuchElementException, IndexOutOfBoundsException{
        return lista.get(0);
    }

    public int getPosicao() {
        return posicao;
    }

    public List<Pessoa> getLista(){
        return lista;
    }

    @Override
    public String toString(){
        StringBuffer s = new StringBuffer();
        for(Pessoa p : lista){
            s.append(p.toString());
        }
        return s.toString();
    }
}

A interface q chama ela

public class Main {

    public static void main(String args[]) throws ParseException{
        
        CadastroDePessoas cdp = new CadastroDePessoas();

        Pessoa p1 = new Pessoa("TESTE", "a", "a", "a", "a", "a", "a", "a");
        Pessoa p2 = new Pessoa("GUILHERME", "2a", "2a", "2a", "2a", "2a", "2a", "2a");
        Pessoa p3 = new Pessoa("JACO", "wow", "wow", "wow", "wow", "wow", "wow", "wow");
        Pessoa p4 = new Pessoa("LUIS", "2", "2", "2", "2", "2", "2", "2");
        Pessoa p5 = new Pessoa("ANA", "AA", "AA", "AA", "AA", "AA", "AA", "AA");

        cdp.adiciona(p4); //Adicionado desta forma
        cdp.adiciona(p5);

        JanelaCadastroDePessoas jcp = new JanelaCadastroDePessoas();
        jcp.getCdp().getLista().add(p1);
        jcp.getCdp().getLista().add(p2);
        jcp.getCdp().getLista().add(p3); //Adicionado de maneira diferente para não ter duvidas!
        jcp.getCdp().getLista().add(p4);
        jcp.getCdp().getLista().add(p5);

        System.out.println(jcp.getCdp().getLista().size());  //Listas diferentes --- abaixo  vv
        System.out.println(cdp.getLista().size());           //Listas diferentes --- acima   ^^

        JanelaMenuPrincipal jmp = new JanelaMenuPrincipal();
        jmp.setVisible(true);

O q vcs axam?

rmendes08

Pra mim é óbvio que as listas são diferentes, pelo jeito você instancia uma lista em CadastroDePessoas e outra lista em JanelaCadastroDePessoas. É provável que você esteja confundindo o conceito de classe e objeto, não ? Para ter certeza poste também o código da JanelaCadastroDePessoas.

guisantogui
package Interface;

import Classes.CadastroDePessoas;
import Classes.Pessoa;
import Classes.PlainDocument;
import java.util.NoSuchElementException;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author P Informática
 */
public class JanelaCadastroDePessoas extends javax.swing.JFrame {
    
    CadastroDePessoas cadp = new CadastroDePessoas();

    Pessoa p1 = new Pessoa("TESTE", "a", "a", "a", "a", "a", "a", "a");
    Pessoa p2 = new Pessoa("GUILHERME", "2a", "2a", "2a", "2a", "2a", "2a", "2a");


    public JanelaCadastroDePessoas() {
        initComponents();
       /* try {
            cadp = CadastroDePessoas.class.newInstance();
        }
        catch (InstantiationException ex) {
            Logger.getLogger(JanelaCadastroDePessoas.class.getName()).log(Level.SEVERE, "Erro", ex);
        }
        catch (IllegalAccessException ex) {
            Logger.getLogger(JanelaCadastroDePessoas.class.getName()).log(Level.SEVERE, "Erro", ex);
        }*/
    }

//AKI CODIGO GERADO PELO NETBEANS                     

    private void btnFecharActionPerformed(java.awt.event.ActionEvent evt) {                                          
        this.dispose();
    }                                         

    private void btnProximoElemActionPerformed(java.awt.event.ActionEvent evt) {                                               
        try{
            txtNome.setText(cadp.prox().getNome());
            txtPosicaoLista.setText(String.valueOf(cadp.getPosicao()+2)+1);
        }
        catch(NoSuchElementException nsee){
            JOptionPane.showMessageDialog(null, "Não há registros na lista!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(IndexOutOfBoundsException iofbe){
            JOptionPane.showMessageDialog(null, "Não há proximo registro", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(NullPointerException npe){
            JOptionPane.showMessageDialog(null, "Não há proximo registro!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }                                              

    private void btnUltimoElemActionPerformed(java.awt.event.ActionEvent evt) {                                              
        try{
            txtNome.setText(cadp.ultimoDaLista().getNome()); // ALTERAR ISSO
            txtPosicaoLista.setText(String.valueOf(cadp.ultimoDaLista()));
        }
        catch(NoSuchElementException nsee){
            JOptionPane.showMessageDialog(null, "Não há registros na lista", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(IndexOutOfBoundsException iofbe){
            JOptionPane.showMessageDialog(null, "Não há registros", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(NullPointerException npe){
            JOptionPane.showMessageDialog(null, "Não há mais registros!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }                                             

    private void btnPrimeiroElemActionPerformed(java.awt.event.ActionEvent evt) {                                                
        try{
            txtNome.setText(cadp.primeiroDaLista().getNome()); // ALTERAR ISSO
            txtPosicaoLista.setText(String.valueOf(cadp.primeiroDaLista()));
        }
        catch(NoSuchElementException nsee){
            JOptionPane.showMessageDialog(null, "Não há registros na lista", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(IndexOutOfBoundsException iofbe){
            JOptionPane.showMessageDialog(null, "Não há registros", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(NullPointerException npe){
            JOptionPane.showMessageDialog(null, "Não há registros!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }                                               

    private void btnAnteriorElemActionPerformed(java.awt.event.ActionEvent evt) {                                                
        try{
            txtNome.setText(cadp.primeiroDaLista().getNome()); // ALTERAR ISSO
            txtPosicaoLista.setText(String.valueOf((cadp.getPosicao()+2)-1));
        }
        catch(NoSuchElementException nsee){
            JOptionPane.showMessageDialog(null, "Não há registros na lista", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(IndexOutOfBoundsException iofbe){
            JOptionPane.showMessageDialog(null, "Não há registro anterior", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(NullPointerException npe){
            JOptionPane.showMessageDialog(null, "Não há registro anterior!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }                                               

    private void btnIrParaActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try{
        cadp.getLista().get(Integer.parseInt(txtIrPara.getText().trim()));
        }
        catch(IndexOutOfBoundsException iofbe){
            JOptionPane.showMessageDialog(null, "Não há elementos na posição selecionada", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
        catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(null, "Este campo deve ser preenchido com números e sem espaços entre eles", "ERRO", JOptionPane.WARNING_MESSAGE);
        }
        finally{txtIrPara.setText("");}
    }                                         

    private void btnAddNovaPessoaActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        try{
            if(txtNome.getText().trim().equals("") ){ //EM CONSTRUÇÃO

            }
            txtApelido.setText("");
            txtBairro.setText("");
            txtCep.setText("");
            txtCidade.setText("");
            txtEmailGeral.setText("");
            txtEndereco.setText("");
            txtFax.setText("");
            txtHomePage.setText("");
            txtIrPara.setText("");
            txtNome.setText("");
            txtPosicaoLista.setText("");
            txtTelefone.setText("");
            txtUF.setText("");
            
        }
        finally{

        }
    }                                                

    public CadastroDePessoas getCdp(){
        return cadp;
    }
    public JTextField getTxtNome(){
        return txtNome;
    }
    public JTextField getTxtApelido(){
        return txtApelido;
    }
    public JTextField getTxtBairro(){
        return txtBairro;
    }
    public JTextField getTxtCep(){
        return txtCep;
    }
    public JTextField getTxtCidade(){
        return txtCidade;
    }
    public JTextField getTxtEmailGeral(){
        return txtEmailGeral;
    }
    public JTextField getTxtEndereco(){
        return txtEndereco;
    }
    public JTextField getTxtFax(){
        return txtFax;
    }
    public JTextField getTxtUf(){
        return txtUF;
    }
    public JTextField getTxtTelefone(){
        return txtTelefone;
    }
    public JTextField getTxtHomePage(){
        return txtHomePage;
    }
    public JTextField getTxtPosicaoLista(){
        return txtPosicaoLista;
    }  

//AKI VARIAVEIS GERADAS PELO NETBEANS                     
             
}

PS.: instanciei daquelas duas maneiras a lista para testar se estava chamando a mesma! (parece q não) :/

rmendes08

Veja bem, cada vez que você cria um objeto CadastroDePessoas você cria uma lista nova. Então, basta instanciar JanelaCadastroDePessoas que você cria um objeto CadastroDePessoas e consequentemente uma lista. Além do mais, a maneira como você está tratando os limites do ArrayList está errada. Você não deve fazer isso capturando exceções, você deve testar o índice antes de acessá-lo. A exceção existe para evitar o que acontece com a linguagem C, na qual você pode acessar um array além dos limites.

guisantogui

Bom então o que você acha que eu devo fazer, para a minha interface conseguir chamar a lista?

vlw pela ajuda!

guisantogui

FINALEMENTE CONSEGUI PEGAR A LISTA CERTA!!! :smiley: :smiley: :smiley:

agora soh falta arrumar o resto :wink:

Criado 16 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 10
Participantes 3