Fazer obj de uma classe pegar valores de outra[resolvido]

24 respostas
P
ola, tenho q pegar os campos de uma classe para utilizar em outra num armazenamento de dados no banco,em uma classe eu tenho o texto do joptionpane q qro salvar onde a disciplina,modulo sao os itens selecionados na combo de outra classe...pensei em fazer algo mais ou menos assim criar um obj da classe q tm as combo pra poder usa-las na classe onde esta sendo criado meu joptionpane o codigo é o seguinte
public void botaoDireito()
	{
		this.addMouseListener(new java.awt.event.MouseAdapter() {   
			public void mouseReleased(java.awt.event.MouseEvent e) {   
				if (e.getButton() == MouseEvent.BUTTON3) {   
					String k=JOptionPane.showInputDialog("");
					try {
						System.out.println("dentro do metodo do joptionpane");
						Object let;
						Object lt;
						System.out.println(tn.comboBox.getSelectedItem()+" "+tn.comboBox2.getSelectedItem());
						if(tn.comboBox.getSelectedItem() != null && tn.comboBox2.getSelectedItem() != null)
						{
							let=tn.comboBox.getSelectedItem();lt=tn.comboBox2.getSelectedItem();
							System.out.println("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");
							comando.executeUpdate("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");   
						}
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}   
			}  

		});
dai este método botaodireito() é chamado no construtor desta mesma classe e eu uso um objeto desta classe na combobox bem meu metodo não esta funcionando os valores deste if
if(tn.comboBox.getSelectedItem() != null && tn.comboBox2.getSelectedItem() != null)
são null e não executam o resto do codigo... como eu posso resolver isto?pq os itens ficam null ah tn é o obj da classe q tm as combo obg

24 Respostas

drsmachado

Como você está trabalhando com Swing, o ideal, ao tentar utilizar os valores dos coampos de uma “janela” é passar a própria janela como parâmetro.
Por exemplo, suponha que a tela em questão tem o nome TelaUm e que as combos tem os nomes combo1 e combo2, na classe da tela

//muito codigo aqui
pegaValorOutraClasse(this, /*mais valores*/);

na classe que irá trabalhar os dados

public class pegaValorOutraClasse(TelaUm tel, /*mais valores*/){
 this.telaUm = tel;
 //mais valores = mais valroes
  valorComboUm = telaUm.combo1.getSelectedIndex().toString();
  valorComboDois = telaUm.combo2.getSelectedIndex().toString();
}

Algo mais ou menos assim

P

humm
vou tentar fazer deste jeito e qualquer coisa eu posto :stuck_out_tongue:
mto obg

P
não ta dando mto certo tipo da varios erros de sintaxe qnd eu tnto fazer a classe receber os itens q qro usar da outra classe mas acusa varios erros de sintaxe e se crio um obj da outra classe para usar estes itens eles aparecem null :roll: cmo posso resolver isto? meu codigo é este aki
public void botaoDireito()
	{
		this.addMouseListener(new java.awt.event.MouseAdapter() {   
			public void mouseReleased(java.awt.event.MouseEvent e) {   
				if (e.getButton() == MouseEvent.BUTTON3) {   
					String k=JOptionPane.showInputDialog("");
					try {
						System.out.println("dentro do metodo do joptionpane");
						Object let;
						Object lt;
						System.out.println(tn.comboBox.getSelectedItem()+" "+tn.comboBox2.getSelectedItem());
						if(tn.comboBox.getSelectedItem() != null && tn.comboBox2.getSelectedItem() != null)
						{
							let=tn.comboBox.getSelectedItem();lt=tn.comboBox2.getSelectedItem();
							System.out.println("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");
							comando.executeUpdate("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");   
						}
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}   
			}  

		}); 


	}
Sendo tn o objeto da outra classe q eu criei para usar as combos obg
drsmachado

O retorno null é pelo fato de que, mesmo instancioando o objeto da outra classo, elas não possuem qualquer valor.

Para facilitar, você pode criar métodos getter e setter para os valores das combos da classe TN.

public String getComboValue(){
 return combobox1.getSelectedItem().toSring();
}

Aí, você pode criar um construtor nesta classe que passou o código em que um dos parâmetros seja a própria TN, como eu havia dito.
Então, na classe que chama

String var = tn.etComboValue();

Fica mais fácil assim

P

vou tentar desta forma e qualquer coisa eu posto e bah mto obg pela ajuda:)

P

bah fiz da maneira q tu disseste mas não deu mto certoo :oops: tipo no metodo get para pegar o retorno da combo eu fiz assim public String getComboValue1(){ return comboBox.getSelectedItem().toString(); }
da nullpointerexception na linha do return
o q eu fiz errado,tipo eu fiz do jeito q tu me explicou mas nao deu certo cmig :roll:
obg

drsmachado

De que forma os valores da combo são selecionados? O usuário é que seleciona?

P

sim o usuario seleciona,pq?

drsmachado

É que caso não haja seleção de um valro na combo, este método getSelectedItem() retorna o valor nulo.

P

hmm
mas nesta tela eu seleciono os itens e depois chamo este metodo q usa elas mas sera q ele esta sendo carregado qnd eu abro a tela?pq c for vai retornar null mesmo :shock: bah!

drsmachado

Posta o trecho de código onde você passa a classe que contém os combos para a classe de processamento

P
este é o metodo na classe que tem as combos
public String getComboValue1(){  
		return comboBox.getSelectedItem().toString();  
		} 
	
	public String getComboValue(){  
		return comboBox2.getSelectedItem().toString();  
		}
e este é o trecho que eu estou tentando usar o valor das combo na outra classe
tn=new TelaDeInsercaoDeNotas();
						System.out.println("dentro do metodo do joptionpane");
						Object let;
						Object lt;
						//System.out.println(tn.comboBox.getSelectedItem()+"cmbos normal"+tn.comboBox2.getSelectedItem());
						System.out.println("metodo q pega valores "+ tn.getComboValue1()+" e"+tn.getComboValue());
						if(tn. getComboValue1() != null && tn. getComboValue() != null)
						{
							let=tn. getComboValue1();lt=tn. getComboValue();
							System.out.println("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");
							comando.executeUpdate("UPDATE nota SET observacao ='"+k+"''"+"' WHERE rc_aluno='"+tn.t0.getText()+"' and disciplina='"+let+"' and modulo='"+lt+"'");   
						}
Sendo q eu declarei a variavel tn no inicio desta classe obg
P

tipo eu coloquei um system e na tela que contem as combos é exibida uma vez o retorno daqueles metodos mas dai depois eu usei o system na outra tela e ocorreu este erro java.lang.NullPointerException at TelaDeInsercaoDeNotas.getComboValue1(TelaDeInsercaoDeNotas.java:618) at BotaoModulo$4.mouseReleased(BotaoModulo.java:146) ...
esta linha aponta para o retorno do primeiro get na tela das combo e para linha q contem o system na classe em q qro usar as combo
:roll:

drsmachado

Onde você instancia a classe que contém o segundo código?

P
tipo onde eu instancio ela na classe das combo? é neste metodo aki q gera uma qntde d botões cm txt diferentes q deveriam conter um comentario kda um
public void determinaBotao()
	{
		int x = 20,y = 280;int o=60;//local onde o botao vai fik na tela
		int cargaHorariaTotalMode = 0;//recebe o valor da ch que ta armazenado no banco
		int resul=0;//qnte d botoes q vao ser criados
		String j=null;Object l=null;
		String v,v1,v2,v3;
		int n,n1,n2,n3;


		try {
			conexao = conecta.conectabanco();
			comando = conexao.createStatement();
		}
		catch(Exception e1) {
			JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
		}

		try
		{
			//puxa do banco os valores da  ch total do modulo da disciplina escolhida na combo e da c.h d tutoria,platao..
			//fazer um for e comparar qual destes itens  é menor e usar para dividir pela ch total
			Object item=null;
			if(comboBox.getSelectedItem()!=null)
				item=comboBox.getSelectedItem();
			resultado=comando.executeQuery("select ch_total,plantao_cm_professor,plantao_sm_professor,tutoria,falta from cargahoraria where Id_disciplina='"+item+"'");
			resultado.next();
			j =resultado.getObject(1).toString();
			cargaHorariaTotalMode=Integer.parseInt(j);


			v =resultado.getObject(2).toString();
			n=Integer.parseInt(v);

			v1 =resultado.getObject(3).toString();
			n1=Integer.parseInt(v1);

			v2 =resultado.getObject(4).toString();
			n2=Integer.parseInt(v2);

			v3 =resultado.getObject(5).toString();
			n3=Integer.parseInt(v3);

			int menor=n;
			if(menor>n1)
				menor=n1;
			else if(menor>n2)
				menor=n2;
			else if(menor>n3)
				menor=n3;

			resul=cargaHorariaTotalMode/menor;
			b=new BotaoModulo[resul];

			for(int i=0;i<resul;i++)
			{
				BotaoModulo h=new BotaoModulo();//aki eu crio um objt da classe onde qro usar as combo
				b[i]=h;
				b[i].setBounds(x, y, o, 25);
				x+=o;
				if(i==11)
				{
					y+=30;
					x=5;	b[i]=h;
					b[i].setBounds(x, y, o, 25);

				}
				else if(i==23)
				{
					y+=30;
					x=5;	b[i]=h;
					b[i].setBounds(x, y, o, 25);
				}


				painel.add(h);
				repaint();
			}


		}
		catch(Exception e5)
		{
			JOptionPane.showMessageDialog(null, "Erro ");
			e5.printStackTrace();
		}


	}//metodo
o construtor dest classe é assim
public BotaoModulo()
	{
		this.setText(" ");
		addMouseListener(new java.awt.event.MouseAdapter() {   
			public void mousePressed(java.awt.event.MouseEvent evt) {   

				if(getText().equalsIgnoreCase(" "))
				{
					setText("T");
				}
				...
			}


		});  
	
		botaoDireito();//metodo q cria o comentario para cada botão
		mudacor();
		setBounds(20, 140, 75, 25);
		setVisible(true);

	}
era isto?
drsmachado

Crie um outro construtor para a classe BotaoModulo assim

ClasseQueChama classeQueChama;
public BotaoModulo(ClasseQueChama classeQueChama){
this.classeQueChama = classeQueChama;
//restante do código do construtor
}

e na classe que chama

BotaoModulo btn = new BotaoModulo(this);

Isso permite que você manipule os eventos e atributos public da classe que chama

P

drsmachado
vou fazer deste jeito que tu disseste qualquer coisa eu posto :stuck_out_tongue:
obrigada pela ajuda

P

drsmachado
na tela botao modulo deu tudo certo no construtor ficou assim

TelaDeInsercaoDeNotas tela; public BotaoModulo(TelaDeInsercaoDeNotas tela) { this.tela=tela; ....}
mas na tela em q crio objetos da classe botao da este erro

The constructor BotaoModulo(new ActionListener(){}) is undefined

dai aparece estas 2 opções para resolver o problema

Change constructor BotaoModulo(TelaDeInsercaoDeNotas) to BotaoModulo(ActionListener) Create a constructor BotaoModulo(ActionListener)
e agora?

drsmachado

Estranho, ele deveria identificar como “this” a própria TelaDeInsercaoDeNotas e não o ActionListener

P

pois é também acho isto mas não sei pq ele fica acusando este erro

P

é possivel pegar estes valores?

P

alguem?

P

bah ainda não consegui resolver este problema ha uma outra maneira de salvar o conteudo de um joptionpane(“tela”)junto com os itens de outra tela ???

P

Resolvido neste topico http://www.guj.com.br/java/237541-salvar-texto-do-joptionpane

Criado 15 de fevereiro de 2011
Ultima resposta 5 de abr. de 2011
Respostas 24
Participantes 2