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

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 [code]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();
}
}
}

	}); 

[/code]
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

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

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

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 [code]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();
}
}
}

	}); 


}
[/code]

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

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

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

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

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

sim o usuario seleciona,pq?

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

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!

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

este é o metodo na classe que tem as combos

[code]public String getComboValue1(){
return comboBox.getSelectedItem().toString();
}

public String getComboValue(){  
	return comboBox2.getSelectedItem().toString();  
	} 
[/code]

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

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:

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

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

[code]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[/code]

o construtor dest classe é assim

[code]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);

}[/code]

era isto?

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

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

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?

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