Passar parametros entre janelas!

2 respostas
paulo_gomes

Olá!

Tenho um código de um jogo ao qual estou desenvolvendo, porém estou tendo alguns problemas que não consigo achar solução devido ao pouco conhecimento que possuo.
Preciso fazer a passagem dos nomes dos jogadores para as telas do jogo e do recorde porém não tenho muita noção de como realizar tal façanha.

Segue código do programa para auxiliar a compreensão.

//janela principal


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

import java.util.*;

public class JanelaPadrao extends JFrame implements ActionListener
{
	JButton b1 = new JButton("Selecionar Jogador");
	JButton b2 = new JButton("Records");
	JButton b3 = new JButton("Sair");
	//usados no jDialog
	JDialog dNomes = new JDialog();

	JLabel lJog1 = new JLabel("Jogador 1:",JLabel.CENTER);
	JLabel lJog2 = new JLabel("Jogador 2:",JLabel.CENTER);
	JTextField tJogador1 = new JTextField(20);
	JTextField tJogador2 = new JTextField(20);

	JButton bInicio = new JButton("Iniciar");
	String jog1,jog2;//armazenam os nomes dos jogadores	

	public JanelaPadrao()
	{   

		JFrame frame = new JFrame("Resta - 1");//Titulo da janela     
		JLabel label = new JLabel("Resta - 1"); // subtitulo em negrito 
		label.setFont(label.getFont().deriveFont(
				label.getFont().getSize2D()));
		frame.getContentPane().add(label, BorderLayout.NORTH);
		label.setHorizontalAlignment(JLabel.CENTER);
		Font labelFont = new Font("Times new roman",Font.BOLD,18);
		label.setFont(labelFont);
		JPanel buttonPanel = new JPanel();
		frame.getContentPane().add(buttonPanel);

		//Botões
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		buttonPanel.add(b1);
		buttonPanel.add(b2);
		buttonPanel.add(b3);

		// Saida
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(870, 510);
		frame.setVisible(true);
	}

	// recebe os eventos dos botões
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource()==b1)
		{
			chamaDialog();		   
		}		

		if (e.getSource()==b2)
		{
			//fazer chamada a tela records
			JanelaTempoRecord gnp= new JanelaTempoRecord ();	 
			gnp.show();
		}

		if (e.getSource()==b3)
		{
			int resp=JOptionPane.showConfirmDialog(null,"Deseja encerrar a aplicação?","Aviso!",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
			if(resp==JOptionPane.YES_OPTION)
			{
				System.exit(0);
			}
		}
		//controla acoes do JDialog

		if(e.getSource()==bInicio)//verifica se o objeto bInicio foi acionado
		{			
			getNjogador1(jog1);	//captura o texto digitado em tJogador 1 e armazena em jog1
			getNjogador2(jog2);//captura o texto digitado em tJogador 2 e armazena em jog2

			// Alteração1 05/04/2008			

			if (tJogador1.getText().isEmpty()==false) 
			{
				if (tJogador2.getText().isEmpty()==false)
				{
					chamaJanelaNivel();
				}
			}

			// fim alteração1 05/04/2008			   

			if (tJogador1.getText().isEmpty()) 
			{
				JOptionPane.showMessageDialog(null,"O campo jogador 1 deve ser preenchido!");
				//repaint();//atualiza a tela
				tJogador1.requestFocus();//da foco ao campo	

			}
			else
				if(jog2.isEmpty()==true)
				{
					int resp = JOptionPane.showConfirmDialog(null,"Jogador 2 não definido. Deseja jogar contra o computador?","Aviso!",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
					if(resp==JOptionPane.YES_OPTION)
					{
						tJogador2.setText(jog2="Computador");
						chamaJanelaNivel();
						//regraPc(); //chama a fucao regra jogo com computador
					}	
					else
						if(resp==JOptionPane.NO_OPTION)
						{							
							//repaint();//atualiza a tela
							tJogador2.requestFocus();//da foco ao campo						
						}	
						else
							if(resp==JOptionPane.CANCEL_OPTION)
							{
								int resp2=JOptionPane.showConfirmDialog(null,"Deseja encerrar a aplicação?","Aviso!",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
								if(resp2==JOptionPane.YES_OPTION)
								{
									System.exit(0);
								}
							}
							else
								if((tJogador1.getText().isEmpty()==false)&&(tJogador2.getText().isEmpty()==false))
								{
									chamaJanelaNivel();
								}
				}
			//verifica oque foi armazenado nas variaveis
			//JOptionPane.showMessageDialog(null, jog1);
			// JOptionPane.showMessageDialog(null, jog2);		  
		}
	}

	//evento que chama o Dialog
	public void chamaDialog()
	{	   
		Font labelFont2 = new Font("Courier new",Font.BOLD,18);
		Container cp=getContentPane();
		cp.setLayout(new BorderLayout());
		bInicio.setSize(5,2);//largura e altura do botao
		bInicio.addActionListener(this);

		JPanel pNomes = new JPanel(new GridLayout(2,2,1,20));
		JPanel pAux=new JPanel();
		pAux.add(pNomes); 
		cp.add(pAux,"North");

		lJog1.setFont(labelFont2);
		lJog2.setFont(labelFont2);
		tJogador1.setSize(10, 2);
		tJogador2.setSize(10, 2);

		//TextField que aceitará no máximo 20 caracteres
		tJogador1.setDocument(new FixedLengthDocument(20));
		tJogador2.setDocument(new FixedLengthDocument(20));

		pNomes.add(lJog1);
		pNomes.add(tJogador1);
		pNomes.add(lJog2);
		pNomes.add(tJogador2);
		pAux.add(bInicio,"South");
		cp.setVisible(true);
		pack();	//joga o conteudo no frame	

		dNomes.setTitle("Seleção de Jogadores");
		dNomes.add(cp);
		dNomes.setModal(true);  

		dNomes.pack();  
		dNomes.setVisible(true);  
	}	

	//captura os nomes digitados nos TextFields
	public String getNjogador1(String nJog1)
	{
		jog1 = tJogador1.getText();//captura o texto digitado em tJogador 1 e armazena em jog1
		return jog1;		
	}
	public String getNjogador2(String nJog2)
	{
		jog2 = tJogador2.getText();//captura o texto digitado em tJogador 1 e armazena em jog1
		return jog2;		
	}

	//metodo de chamada para a janela nivel dificuldade
	public void chamaJanelaNivel()
	{
		JanelaNivelDificuldade jn = new JanelaNivelDificuldade();
		jn.show();
		dNomes.dispose();//fecha o Dialog
	}

	/*public void passaParametros()
	{
		JanelaJogador jogo = new JanelaJogador(); //instanciamento da classe Tela2, que é onde você quer passa os nomes
		jogo.setJogarContra(this.JogarContra);// mostra se é contra humano ou pc, passa 0 se for humano e 1 se for pc
		jogo.setNivel(nivel);// passa o nível de dificuldade
		jogo.setJog1(jog1);//nome do jogador 1 sendo passado
		jogo.setJog1(jog2);// nome do jogador 2 sendo passado
		jogo.JanelaJogador();//metodo onde foi criado a tela (no seu caso esta no construtor, porém acho melhor deixar em ontro metodo, por que é melhor passar os nomes dos jogadores e o nivel antes de chamar o metodo que cria a tela) 
	}*/	

	public static void main(String[] args)
	{
		JanelaPadrao janela = new JanelaPadrao(); 

	}
}
//janela de selecao nivel de dificuldade
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JanelaNivelDificuldade extends JFrame implements ItemListener
{		
	JLabel lTitulo = new JLabel("Resta 1",JLabel.CENTER);
	
	JRadioButton rNivel1,rNivel2,rNivel3;
	ButtonGroup radioGrupo = new ButtonGroup();
	
	public void itemStateChanged(ItemEvent arg0)
	{
		
      // alteração2 05/04/2008
		
	   if (arg0.getSource()== rNivel1)
		 {
		   JanelaNivelDificuldade  x= new JanelaNivelDificuldade();
		   this.setVisible(false);
		  }
		
	   //  fim alteração2 05/04/2008
		   
	
		
		if(arg0.getSource()==rNivel1)
		{
			 //regra();
			chamaJanela();
			fechaJanela();
		}
		else
		{
			if(arg0.getSource()==rNivel2)
			{
				//regra();
				chamaJanela();
				fechaJanela();
			}
			else
			{
				if(arg0.getSource()==rNivel3)
				{
                     //regra();
					chamaJanela();
					fechaJanela();
				}
			}
		}
	}	
	
	public JanelaNivelDificuldade()
	{
		super("Nível de Dificuldade");
		Container cp = getContentPane();
		cp.setSize(820,440);
		
		rNivel1 = new JRadioButton("Nível 1"); rNivel1.addItemListener(this);
		rNivel2 = new JRadioButton("Nível 2"); rNivel2.addItemListener(this);
		rNivel3 = new JRadioButton("Nível 3"); rNivel3.addItemListener(this);
		
		Font radioFont = new Font("Courier new",Font.BOLD,18);
		Font labelFont = new Font("Times new roman",Font.BOLD,16);
		
		rNivel1.setFont(radioFont);
		rNivel2.setFont(radioFont);
		rNivel3.setFont(radioFont);
		lTitulo.setFont(labelFont);
		
		radioGrupo.add(rNivel1);
		radioGrupo.add(rNivel2);
		radioGrupo.add(rNivel3);
		rNivel1.setHorizontalAlignment(SwingConstants.CENTER);
		rNivel2.setHorizontalAlignment(SwingConstants.CENTER);
		rNivel3.setHorizontalAlignment(SwingConstants.CENTER);
		
		cp.setLayout(new BorderLayout());
		cp.add(lTitulo,"North");
		
		JPanel pCenter = new JPanel(new GridLayout(3,1,10,10));
		pCenter.add(rNivel1);
		pCenter.add(rNivel2);
		pCenter.add(rNivel3);
		cp.add(pCenter,"Center");
		cp.setVisible(true);
		pack();
	}
	
	/*public void facil()
	{
		if(jogadas == 15)
		{
			regraPc();
		}
		
	}
	
	public void medio()
	{
		if(jogadas == 10)
		{
			regraPc();
		}
	}
	
	public void dificil()
	{
		if(jogadas == 5)
		{
			regraPc();
		}
	}
	public void regraPc()
	{
		vAtual = vAtual-(4-vJog1);
	}*/
	
	public void chamaJanela()
	{
		JanelaJogador jg=new JanelaJogador();
		jg.show();
	}
	
	public void fechaJanela()
	{
		JanelaNivelDificuldade jn = new JanelaNivelDificuldade();
		jn.setVisible(false);
	}
	public static void main(String args[])
	{
		JanelaNivelDificuldade jn = new JanelaNivelDificuldade();
		{
			jn.show();
		}
	}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//import java.util.Date;

public class JanelaJogador  extends JFrame implements ActionListener
{
	//private static final String computador = null;

	Date dt=new Date();

	double total;	
	int vAtual,vJog2,jogadas;

	int n=(int) (Math.random()*6+37);
	String sn = String.valueOf(n);

	JLabel Jogador1,x,Jogador2, Pontuacao;

	JTextField Tjogador1,Tjogador2;	
	JTextArea ta=new JTextArea (43,3);
	JScrollPane sp= new JScrollPane(ta);

	JButton b1,b2,b3;

	JPanel pJogadores;
	JPanel Ptitulo;
	JLabel TPontuacao;

	JLabel Jogador;

	String frase;
	String frase2;

	int y;	
	String jogador1;
	String jogador2;

	int l;	
	boolean valor;

	long tempoi;
	long tempof;
	float tempoTotal;
	String horai,horaf; 

	public JanelaJogador()
	{

		super("Jogagor X Jogador");	
		//jogador1 = new JanelaPadrao();
		//jogador2 = new JanelaPadrao();

		Ptitulo= new JPanel();
		Jogador1= new JLabel();
		Jogador1.setText("Jogador");
		x= new JLabel();
		x.setText("x");
		x.setHorizontalAlignment(SwingConstants.CENTER);
		x.setVerticalAlignment(SwingConstants.CENTER);
		Jogador2= new JLabel();
		Jogador2.setText("Jogador");
		Tjogador1=new JTextField(20);
		Tjogador2=new JTextField(20);
		//TextField aceitará no máximo 20 caracteres
		Tjogador1.setDocument(new FixedLengthDocument(20));
		Tjogador2.setDocument(new FixedLengthDocument(20));
		Pontuacao=new JLabel();
		Pontuacao.setText("Pontuacao");
		TPontuacao = new JLabel();
		TPontuacao.setText(sn);	
		JPanel pAux1 = new JPanel(new GridLayout(1,7,10,10));
		JPanel pAux2 = new JPanel(new GridLayout(1,1));
		JPanel pAux3 = new JPanel(new GridLayout(3,1,30,30));
		Jogador=new JLabel();

		b1 = new JButton ();
		b1.setText("1");
		b1.setBounds(50,30,100,30);
		b1.setBackground(new Color (0,0,170));
		b1.setForeground(Color.WHITE);
		b1.setHorizontalAlignment(SwingConstants.CENTER);
		b1.setVerticalAlignment(SwingConstants.CENTER);
		b1.addActionListener(this);
		getContentPane().add(b1);

		b2 = new JButton ();
		b2.setText("2");
		b2.setBounds(50,30,100,30);
		b2.setBackground(new Color (0,0,170));
		b2.setForeground(Color.WHITE);
		b2.setHorizontalAlignment(SwingConstants.CENTER);
		b2.setVerticalAlignment(SwingConstants.CENTER);
		b2.addActionListener(this);
		getContentPane().add(b2);    

		b3 = new JButton ();
		b3.setText("3");
		b3.setBounds(50,30,100,50);
		b3.setBackground(new Color (0,0,170));
		b3.setForeground(Color.WHITE);
		b3.setHorizontalAlignment(SwingConstants.CENTER);
		b3.setVerticalAlignment(SwingConstants.CENTER);
		b3.addActionListener(this);
		getContentPane().add(b3);	

		pAux1.add(Jogador1);
		pAux1.add(Tjogador1);
		pAux1.add(x);
		pAux1.add(Jogador2);
		pAux1.add(Tjogador2);
		pAux1.add(Pontuacao);
		pAux1.add(TPontuacao);

		Container cp=getContentPane();
		cp.setLayout(new BorderLayout());
		Ptitulo.add(pAux1);
		cp.add(Ptitulo, "North");
		pAux2.add(sp);
		cp.add(pAux2,"Center");
		JPanel pBotao = new JPanel();

		pAux3.add(b1);
		pAux3.add(b2);
		pAux3.add(b3);
		pBotao.add(pAux3);
		cp.add(pBotao,"East");
		pack();		

		if (n!=1)
		{

			frase="Jogador1 " +jogador1 ;
			ta.append(""+frase+"");
			y=2;
			l=1;
			setVisible(true);
		}
	}

	/*public void recebeParametros()
	{
		JanelaPadrao janela = new JanelaPadrao(); 

//		METODO QUE RECEBE O NOME DO JOGADOR 1
		public void setJog1(JTextField tJogador1)
		{
			this.Jogador1.setText(tJogador1.getText());
		}

//		METODO QUE MOSTRA O NOME DO JOGADOR 1
		public String getJog1()
		{
			return this.Tjogador1.getText();
		}

//		METODO QUE RECEBE O NOME DO JOGADOR 2 
		public void setJog2(JTextField tJogador2)
		{
			this.Tjogador2.setText(tJogador2.getText());
		}

//		METODO QUE MOSTRA O NOME DO JOGADOR 2
		public String getJog2()
		{
			return this.Tjogador2.getText();
		}
	}*/
	
	public void actionPerformed(ActionEvent arg0)
	{		
		if(arg0.getSource()==b1)
		{
			subtrai(1);


		}
		else
			if(arg0.getSource()==b2)
			{

				subtrai(2);
			}
			else
				if(arg0.getSource()==b3)
				{
					subtrai(3);

				}	
		//if (jogador2==computador && l==3)
			//{
			//subtrai(3);
			//}
		//if (jogador2==computador && l==2)
		//{
		//	subtrai(2);
		//l=3;
		//}

		//if (jogador2==computador && l==1)
		//{
		//	subtrai(1);
		//	l=2;
		//}

	}

	public void subtrai(int num)
	{
		if(n > 1)
		{
			n= n - num;
			switch (n)
			{
			case 3: b3.setEnabled(false);
			break;
			case 2: b3.setEnabled(false);
			b2.setEnabled(false);
			break;
			case 1:b3.setEnabled(false);
			b2.setEnabled(false);
			b1.setEnabled(false);
			break;
			}				
			frase2=" tirou: " + num + " sobrou = " + n;
			ta.append(""+frase2+"\n");
			if (n!=1)
			{
				if (y==1){
					frase="Jogador1 " +jogador1 ;
					ta.append(""+frase+"");
					y=y+1;
					setVisible(true);	
				}
				else 
				{
					frase="Jogador2 " +jogador2 ;
					ta.append(""+frase+"");
					y=y-1;
					setVisible(true);	
				}
			}
			if(n==1)
			{

				String hora = ""+dt.getHours()+":"+dt.getMinutes()+dt.getSeconds();
				tempof = dt.getTime();
				tempoTotal=(tempof-tempoi)/1000;						
				ta.append("Fim"+tempoTotal+"");	
			}

		}
	}

	public static void main (String args[])
	{
		JanelaPadrao jl=new JanelaPadrao();
		//setJog1(Tjogador1);
		//setJog2(Tjogador2);
		Date dt=new Date();
		String hora = ""+dt.getHours()+":"+dt.getMinutes()+dt.getSeconds();
		long tempoi=dt.getTime();
		JanelaJogador jg=new JanelaJogador();


	}
}
//janela record
import javax.swing.*;
import java.awt.*;
import java.util.*;

       public class JanelaTempoRecord extends JFrame 
	     {
		 JTextArea ta = new JTextArea(10,25);
	     JScrollPane sp = new JScrollPane (ta); //barra de rolagem
	       JPanel ptop;
	       JLabel ltotal,ltempo,ljogador,ltempojogo;
	       JLabel jogador1;
	       JTextField tjogador,ttempojogo;
	       JTextField nomejogador1,nomejogador2;
	       
	       String frase;
	      
	        public JanelaTempoRecord()
		     {
			   super ("Tempo Record");
			   JPanel ptop = new JPanel(new GridLayout(2,1));
			   ltotal= new JLabel();
			   ltotal.setText("Total de tempos & records");
			   ltotal.setSize(350,90);
			   ltotal.setFont(new Font("Courier new",Font.BOLD,12));
			   ltotal.setHorizontalAlignment(JLabel.CENTER);
			   
			   ltempo= new JLabel();
			   ltempo.setText("Tempo de jogo:[00:00]");
			   ltempo.setSize(350,90);
			   ltempo.setFont(new Font("Courier new",Font.BOLD,12));
			   ltempo.setHorizontalAlignment(JLabel.CENTER);
			  
               ljogador=new JLabel();
			   ljogador.setText("Jogadores");
			   ljogador.setFont(new Font("Courier new",Font.BOLD,14));
			   ljogador.setHorizontalAlignment(JLabel.HEIGHT);
				  
			 
			   ltempojogo=new JLabel();
			   ltempojogo.setText("Tempo");
			   ltempojogo.setFont(new Font("Courier new",Font.BOLD,14));
			   ltempojogo.setHorizontalAlignment(JLabel.RIGHT);
				  
			   
			   ptop.add(ltotal);
			   ptop.add(ltempo);
			   ptop.add(ljogador);
			   ptop.add(ltempojogo);
			 
			   Container cp=getContentPane();
		       cp.setLayout(new BorderLayout());
		       
		   	   cp.add(ptop,"North");
		       cp.add(sp,"Center");
		      pack();
		        frase="Lidia";
				ta.append(""+frase+"");
				ta.setEditable(false);
				
		      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					setVisible(true);
				}
		   
		   
		   /*//Recebe nome do jogador
	        		   public void setJogador1(JTextField nomejogador1 )
		   { 
			   this.jogador1.setText(nomejogador1.getText());
		   }
		  
		 //METODO QUE MOSTRA O NOME DO JOGADOR 1
		   public String getJogador1(){ 
		   return this.jogador1.getText(); 
		   }
		   
		  // METODO QUE RECEBE O NOME DO JOGADOR 1
		   public void setJogador1(JTextField nomejogador1)
		   { 
		   this.jogador2.setText(nomejogador1.getText()); 
		   }
		   
		  // METODO QUE MOSTRA O NOME DO JOGADOR 1
		   public String getJogador1(){ 
		   return this.jogador1.getText(); 
		  */ 
		   
		     public static void main(String[] args)
		   {
		    JanelaTempoRecord gnp= new JanelaTempoRecord ();	 
		   }
	     
		   }

Agradeço pela ajuda.

2 Respostas

S

Em algum momento você vai criar tal janela, certo!? Passa por parâmetro no construtor dela!
Seu código é muito extenço e tô com preguiça de ler 8), mas provavelmente você têm um JFrame principal que chama ountro certo?
ficaria mais ou menos assim:

M

Bom tem varios metodos de se fazer isso:

usando o metodo static é um exemplo

crie uma nova classe

public  class Opa {
    private static String nome="";
    /** Creates a new instance of Opa */
    public Opa() {
    }
    
    public  static void setNome(String n){
        nome = n;
    }
    
    public static String getNome(){
        return nome;
    }
}


}

agora o sistema todo enxerga o nome do jogador basta acessar

Opa.getNome();

ou fazendo da seguinte maneira

ao chamar a proxima janela

janela.setVisible(true);

janela.setNomeJogador(“fulano”);

…

crie um novo atributo e um metodo set para atribuir um valor

Criado 6 de abril de 2008
Ultima resposta 6 de abr. de 2008
Respostas 2
Participantes 3