Fazer obj de uma classe pegar valores de outra[resolvido]
24 respostas
P
paty_trind
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
publicvoidbotaoDireito(){this.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseReleased(java.awt.event.MouseEvente){if(e.getButton()==MouseEvent.BUTTON3){Stringk=JOptionPane.showInputDialog("");try{System.out.println("dentro do metodo do joptionpane");Objectlet;Objectlt;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(SQLExceptione1){// TODO Auto-generated catch blocke1.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
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
publicclasspegaValorOutraClasse(TelaUmtel,/*mais valores*/){this.telaUm=tel;//mais valores = mais valroesvalorComboUm=telaUm.combo1.getSelectedIndex().toString();valorComboDois=telaUm.combo2.getSelectedIndex().toString();}
Algo mais ou menos assim
P
paty_trind
humm
vou tentar fazer deste jeito e qualquer coisa eu posto
mto obg
P
paty_trind
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
publicvoidbotaoDireito(){this.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseReleased(java.awt.event.MouseEvente){if(e.getButton()==MouseEvent.BUTTON3){Stringk=JOptionPane.showInputDialog("");try{System.out.println("dentro do metodo do joptionpane");Objectlet;Objectlt;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(SQLExceptione1){// TODO Auto-generated catch blocke1.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.
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
Stringvar=tn.etComboValue();
Fica mais fácil assim
P
paty_trind
vou tentar desta forma e qualquer coisa eu posto e bah mto obg pela ajuda:)
P
paty_trind
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
paty_trind
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
paty_trind
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
e este é o trecho que eu estou tentando usar o valor das combo na outra classe
tn=newTelaDeInsercaoDeNotas();System.out.println("dentro do metodo do joptionpane");Objectlet;Objectlt;//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
paty_trind
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
paty_trind
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
publicvoiddeterminaBotao(){intx=20,y=280;into=60;//local onde o botao vai fik na telaintcargaHorariaTotalMode=0;//recebe o valor da ch que ta armazenado no bancointresul=0;//qnte d botoes q vao ser criadosStringj=null;Objectl=null;Stringv,v1,v2,v3;intn,n1,n2,n3;try{conexao=conecta.conectabanco();comando=conexao.createStatement();}catch(Exceptione1){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 totalObjectitem=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);intmenor=n;if(menor>n1)menor=n1;elseif(menor>n2)menor=n2;elseif(menor>n3)menor=n3;resul=cargaHorariaTotalMode/menor;b=newBotaoModulo[resul];for(inti=0;i<resul;i++){BotaoModuloh=newBotaoModulo();//aki eu crio um objt da classe onde qro usar as combob[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);}elseif(i==23){y+=30;x=5;b[i]=h;b[i].setBounds(x,y,o,25);}painel.add(h);repaint();}}catch(Exceptione5){JOptionPane.showMessageDialog(null,"Erro ");e5.printStackTrace();}}//metodo
o construtor dest classe é assim
publicBotaoModulo(){
this.setText(" ");addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmousePressed(java.awt.event.MouseEventevt){if(getText().equalsIgnoreCase(" ")){
setText("T");}
...
}
}); botaoDireito();//metodo q cria o comentario para cada botãomudacor();setBounds(20,140,75,25);setVisible(true);}
era isto?
drsmachado
Crie um outro construtor para a classe BotaoModulo assim
Isso permite que você manipule os eventos e atributos public da classe que chama
P
paty_trind
drsmachado
vou fazer deste jeito que tu disseste qualquer coisa eu posto
obrigada pela ajuda
P
paty_trind
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