Olá…estou tentando fazer com que eu possa escrever uma mensagem em um frame e ao clicar em ‘enviar’ o label do segundo frame seja alterado, passando a exibir o que eu digitei no primeiro frame.
Dentre os varios problemas, como não conseguir fazer referencia ao segundo frame no metodo actionPerformed, eu sequer consigo referenciar um label do frame 2 dentro do frame 1, trocando seus valores…
no código abaixo tento referenciar o JLabel do frame2 em uma variavel do frame 1 e vice-versa…
Formulario2f2=newFormulario2(f1.getFrame());newThread(f2).start();f1.setF(f2.getF());//referencia o frame do form 2 no form 1f2.setF(f1.getF());//refetencia o frame do form 1 no form 2f1.getLabel2().setText(f2.getLabel22().getText());f2.getLabel22().setText(f1.getLabel().getText());
}
o que acontece é que na linha “f1.getLabel2().setText(f2.getLabel22().getText());” eu pego uma NullPOinterException
alguém poderia me ajudar aqui ? não entendi o porque do null Exception…
De uma olhada neste tutorial, e depois pesquise sobre o BeanUtils e PropertyUtils do apache. (commons-beanutils-1.6.jar), facilita muito a utilização com reflection.
Daniel Eduardo
dudaskank
Acho que não precisa de tanto não, é só dar uma organizada melhor no código que vai…
Aliás, olhando esse trecho aí já fiquei perdido hehehe.
Bom, o que vc vai precisar fazer é ver o que tá sendo retornado pelos seus getLabel(), porque a idéia é essa mesma. Provavelmente faltou fazer um label22 = new JLabel() hehehe.
Bem, se vc colocar a outra parte do código vai dar pra ver o que acontece aí melhor…
flw
ItaloE
Blz, dudaskank…
segue o codigo completo…
public class Teste {
/** * @param args */publicstaticvoidmain(String[]args){Formulariof1=newFormulario();newThread(f1).start();Formulario2f2=newFormulario2(f1.getFrame());newThread(f2).start();f1.setF(f2.getF());//referencia o frame do form 2 no form 1f2.setF(f1.getF());//refetencia o frame do form 1 no form 2//troca o valor de um label do frame x pelo valor do label do frame y, somente para testef1.getLabel2().setText(f2.getLabel22().getText());f2.getLabel22().setText(f1.getLabel().getText());}
}
Agora os formularios…
public class Formulario implements ActionListener, Runnable {
private JLabel label;
privateJLabellabel2;privateJTextFieldtextField;privateJPanelpanel;privateJFrameframe;privateJFramef;privateJButtonbutton;privateJButtonbutton2;publicJFramegetFrame(){returnframe;}// construtorpublicFormulario(){}publicvoidmontaForm(){label=newJLabel("seu nome: ");label2=newJLabel("form 1");textField=newJTextField(30);button=newJButton("Exibir");button2=newJButton("Enviar");button.addActionListener(this);panel=newJPanel();panel.add(label);panel.add(textField);panel.add(button);panel.add(button2);panel.add(label2);button2.setAlignmentX(100);button2.setAlignmentY(30);frame=newJFrame("Meu First Form, hahhaha!!!");frame.add(panel);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){Stringtexto=textField.getText();JOptionPane.showMessageDialog(f,texto);}publicvoidrun(){this.montaForm();}publicJFramegetF(){returnf;}publicvoidsetF(JFramef){this.f=f;}publicJLabelgetLabel2(){returnlabel2;}publicvoidsetLabel2(JLabellabel2){this.label2=label2;}publicJLabelgetLabel(){returnlabel;}
}
Formulario 2:
publicclassFormulario2implementsActionListener,Runnable{// form 2privateJLabellabel2;
privateJLabellabel22;privateJTextFieldtextField2;privateJPanelpanel2;privateJFrameframe2;privateJFramef;privateJButtonbutton2;publicJFramegetFrame(){returnframe2;}// construtorespublicFormulario2(){}publicFormulario2(JFramef){}publicvoidmontaForm(){label2=newJLabel("seu nome: ");label22=newJLabel("form 2");textField2=newJTextField(30);button2=newJButton("Exibir");button2.addActionListener(this);panel2=newJPanel();panel2.add(label2);panel2.add(textField2);panel2.add(button2);panel2.add(label22);frame2=newJFrame("meu segundo frame,,heheheh!!!");frame2.add(panel2);frame2.pack();frame2.setVisible(true);frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){Stringtexto=textField2.getText();JOptionPane.showMessageDialog(f,texto);}publicJFramegetF(){returnf;}publicvoidsetF(JFramef){this.f=f;}publicvoidrun(){this.montaForm();}publicJLabelgetLabel2(){returnlabel2;}publicJLabelgetLabel22(){returnlabel22;}publicvoidsetLabel22(JLabellabel22){this.label22=label22;}
}
Já fiz diversas variações e de maneira nehuma consegui fazer um frame trocar um valor de um atributo de outro.
Vlw pela força…
aangreen
Passa o texto q vc quer imprimir no outro frame pelo construtor q funciona, ja usei dessa forma
ItaloE
entao, anngreen…
ate consegui fazer o que vc falou …mas não consegui pegar a ação do botao enviar do outro frame para fazer essa atribuição…
A idéia é fazer isto dinamicamente… se você souber uma forma de fazer assim pelo construtor eu agradeço …tentei aqui e não tive sucesso(buscando um ActionEvent no construtor).
A idéia principal é passar as infos que são digitadas nos JTextFields para o outro frame…
Mas vlw pela dica!!!
aangreen
entaum cara, se vc quer passar só o q é digitado, poderia fazer pelo construtor mesmo…
mas se vc quiser passar um evento… ou que o frame dependa de um principal… aconselho a usar JInternalFrame
ItaloE
Vou tentar implementar aqui com essas duas aproximações então…
Vlw pelas dicas ae aangreen
ct_d
Oi pessoal
Estou aqui com uma duvida
Estou a tentar saltar de uma janela (MainFrame- onde está o menu novo jogo) para a janela (ConfigDialog) onde a ConfigDialog vai buscar caracteristicas À função JogoEvolucionario
Inseri este codigo:
protected void novoJogoMenuItem_actionPerformed(ActionEvent e) {
ConfigDialog cd = new ConfigDialog();
cd.setVisible(true);
JogoEvolucionario conf = cd.getJogoEvolucionario();
if(conf != null){
//inicia jogo evolucionario no panel
}
O código funciona, mas não me mostra as labels, comboBox, etc k estao na janela ConfigDialog, apenas mostra essa janela vazia…
Como faço pa mostrar tudo o que está na janela?
cumprimentos
CrOnNoS
coloque o setVisible(true) apenas depois de terminar de mexer (configurar) tudo que você precisa mexer na sua janela.
ct_d
pus o setVisible(true) depois, e continua a não mostrar o conteudo que esta dentro da janela :S
posso ter feito mal :oops:
meti assim :
protected void novoJogoMenuItem_actionPerformed(ActionEvent e) {
ConfigDialog cd = new ConfigDialog();
JogoEvolucionario conf = cd.getJogoEvolucionario();
if(conf != null){
//inicia jogo evolucionario no panel
}
cd.setVisible(true);
}