Dificuldade de usar código de uma classe em outra

4 respostas
R
Olá pessoal, é o seguinte eu tenho minha classe janela, já pronta com um botão, que ao clicar nele sorteia-se uma pessoa, este processo para sortear está em outra classe. Também não consegui aprendi a usar o ArrayList, o que eu quero fazer é o seguinte: criar um sistema de sorteio, onde eu adiciono nomes de pe no arraylist, dai ao clicar no botão sortear, ele sorteia um dessas peessoa.. ah e essas pessoas tem que ser guardadas em arquivo Então tenho essa dificuldade, de ao clicar no botão fazer algo vou cologar o código abaixo:
import java.util.ArrayList;   
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Janela extends JFrame implements ActionListener{
    ArrayList<Pessoa> pessoas;
    private JButton b1; 
    private final Container container;
    private JLabel l1;
    private JMenuBar m1;
    JMenu menuCadastro, menuConfig, menuRelat, menuSair;
    JMenuItem miPessoaj, miPergunta, miAltLogo, miAltNomeEvento, miGanhador, miQntosGanharam;

  public Janela(){
    setTitle("Sorteio");
    setSize(800,600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
    
    container = getContentPane();
    
    b1 = new JButton("Sortear");
    m1 = new JMenuBar();
    menuCadastro= new JMenu ("Cadastrar");
    menuConfig = new JMenu ("Configurações");
    menuRelat = new JMenu ("Relatórios");
    miPessoaj = new JMenuItem ("Cadastrar Pessoa");
    miPessoaj.addActionListener(this);
    miPergunta = new JMenuItem ("Cadastrar Pergunta");
    miPessoaj.addActionListener(this);
    menuCadastro.add(miPessoaj);
    menuCadastro.add(miPergunta);
    miAltLogo = new JMenuItem ("Alterar Logo");
    miAltLogo.addActionListener(this);
    miAltNomeEvento = new JMenuItem ("Alterar nome do evento");
    miAltNomeEvento.addActionListener(this);
    menuConfig.add(miAltLogo);
    menuConfig.add(miAltNomeEvento);
    miGanhador = new JMenuItem("Mostrar vencedores");
    miGanhador.addActionListener(this);
    miQntosGanharam = new JMenuItem("Mostrar quantos já ganharam");
    menuRelat.add(miGanhador);
    menuRelat.add(miQntosGanharam);
    menuSair = new JMenu("Sair");
    
    m1.add(menuCadastro);
    m1.add(menuConfig);
    m1.add(menuRelat);
    m1.add(menuSair);
    setJMenuBar(m1);
 
    
    getContentPane().add(b1);
    
    setVisible(true);
  }
  

   public void actionPerformed(ActionEvent e)
  {
   if (e.getSource()==miPessoaj){
           String resp=JOptionPane.showInputDialog(null,"Qual o seu nome?","Login no sistema",JOptionPane.QUESTION_MESSAGE);
    }
   if (e.getSource()==miPergunta)
      l1.setText("Escolhido o item Perguntas");      
   if (e.getSource()==miAltLogo)
      l1.setText("Escolhido o item Alterar Logo");
   if (e.getSource()==miAltNomeEvento)
      l1.setText("Escolhido o item Alterar Nome do Evento");  
   if (e.getSource()==miGanhador)
      l1.setText("Escolhido o item Ganhador");
   if (e.getSource()==miQntosGanharam)
      l1.setText("Escolhido o item Quantos Ganharam");
   if (e.getSource()==menuSair)
        System.exit(0);   
  }
}
aqui agora a classe Pessoa
public class Pessoa extends Janela {
    private String nome;
    private int idade;
    private String curso;
    
    public void  Pessoa(String n, int i, String c){
        nome = n;
        idade = i;
        curso = c;
    }
    
    public String getNome(){
        return nome;
    }
    
    public int getIdade(){
        return idade;
    }
    
    public String getCurso(){
        return curso;
    }   
}
Classe sorteio:
import java.io.FileOutputStream;
import java.util.Random;
import javax.swing.JOptionPane;

/**
 *
 * @author Cokda
 */
public class Sorteio {

    private String Nomesorteio;
    private String Nomepremio;
    private int ValorPremio;
    
    public void Sorteio (String ns, String np, int v){
        Nomesorteio = ns;
        Nomepremio = np;
        ValorPremio = v;           
    }

    public void Sorteia (){
        
        Random random = new Random();
        random.nextInt();

    }

    public void teste(){

    }

    public int PremioDinheiro (int x){
      x =(Integer.parseInt(JOptionPane.showInputDialog("Insira o valor do premio:")));
      return x;
    }

    public String Premio (String x){
        JOptionPane.showInputDialog("Informe o prêmio deste sorteio:");
        return x;
    }

    public String Evento (String x){
        JOptionPane.showInputDialog("Informe o nome deste evento para o sorteio sorteio:");
        return x;
    }

}
Classe cadastro
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 *@author Cokda
 */
public class Cadastro implements Serializable {//Salvar uma nova pessoa em arquivo

    private ArrayList<Pessoa> pessoas;
    
    public Cadastro() {
        pessoas = new ArrayList<Pessoa>();
    }

   
    public void salvaArquivo(Cadastro pessoas) {
        try {
            ObjectOutputStream arquivo = new ObjectOutputStream(new FileOutputStream("cadastro.ser"));

            arquivo.writeObject(pessoas); // salva a referência pessoa no arquivo
            arquivo.close(); // fecha o arquivo para não ter problemas futuramente

        } catch (Exception ex) {
            Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Função para carregar as referências dos objetos, atraves de um retorno de um arraylist com eles
     * @return ArrayList
     */

    public ArrayList carregaARquivo() {//Carregar as referencias dos objetos (arquivo salvo)
        ArrayList x = new ArrayList();
        try {
            ObjectInputStream arquivo = new ObjectInputStream(new FileInputStream("cadastro.ser"));  //deserealiza o objeto

            x.add(arquivo.readObject()); // Salva em um arraylist o primeiro objeto que esta no arquivo
        } catch (Exception ex) {
            Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
        }
        return x;  // retorna o arraylist com os objetos
    }
  
   
}
e a main:
public class Main {

    public static void main(String[] args) {

        Janela j   = new Janela();
    }
}

4 Respostas

douglas_vidotto

Para que seu botão faça algo, é necessário colocar ele para escutar um evento. Nesse caso você adicionará um ActionListener nele. Dá uma pesquisada sobre isso no Google que provavelmente você achará vários exemplos.

Abraços

Jemerson

Tente colocar o trecho de código abaixo dentro do construtor da classe Janela:

public Janela() {
//seu código anterior estará acima
setVisible(true);	 

            //adicione as linhas abaixo ( após o setVisible(true)
		b1.addActionListener(new java.awt.event.ActionListener() {
		    public void actionPerformed(java.awt.event.ActionEvent evt) {
		        b1ActionPerformed(evt);
		    }
		});
		
	}

Fora do construtor, adicione o método abaixo:

private void b1ActionPerformed(java.awt.event.ActionEvent evt) {		
               JOptionPane.showMessageDialog(null, "Você clicou no botão "+b1.getText());

	}

Agora quando você clicar no botão,ele irá responder com uma telinha com uma mensagem.
Acertando essa parte, o resto ficará mais fácil, pois você poderá adicionar a operação do sorteio.

Qualquer coisa, estamos aqui.

R

valeu… mas acho q essa minha classe Sorteio não está correta…
vou dar uma revisada, pq qndo clico no botão sorteio, nao faz nada!

Jemerson

Pelo que vi no código abaixo :

//    public int sorteia(){
    public void Sorteia() {

		Random random = new Random();
		random.nextInt();

	}

Ou seja, você chama o metodo sorteio, ele gera um valor e esse valor é perdido.
O que você pode fazer, é mudar o retorno para int e a partir daí você usa esse número para buscar uma posição
do vetor ou a lista de pessoas.

Por exemplo:

p=new ("JOAO"); p1=new ("Pedro"); p2=new ("Thiago");
Aí vc joga essas instancias dentro de alguma estrutura de dados (vetor, lista etc) e ao chamar o método sorteia, você
pode acessar diretamente a posição dessa estrrutura de dados que seu ojbeto estará disponível.

suaLista={p1,p2,p3} Sorteio s = new Sorteio(); System.out.println(suaLista[s.sorteio]);

Os códigos acima não irão compilar, eles apenas ilustram a ideia.

Criado 7 de dezembro de 2011
Ultima resposta 7 de dez. de 2011
Respostas 4
Participantes 3