Comunicação entre Frames  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
ItaloE
JavaBaby
[Avatar]

Membro desde: 24/08/2006 17:09:13
Mensagens: 76
Offline

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..

public static void main(String[] args) {
Formulario f1 = new Formulario();
new Thread(f1).start();

Formulario2 f2 = new Formulario2(f1.getFrame());
new Thread(f2).start();


f1.setF(f2.getF());//referencia o frame do form 2 no form 1
f2.setF(f1.getF());//refetencia o frame do form 1 no form 2

f1.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...

se precisar do resto do código é só falar....

"Think!"

"Povo estúpido tem q se F..., vamo nos para mais 4 anos de estupidez e ignorância. Mas o povo tem o que merece"
danyelsanches
JavaChild

Membro desde: 19/05/2006 17:46:34
Mensagens: 107
Offline

Olá, para isto vc poderá usar Reflection:

http://www.guj.com.br/java.tutorial.artigo.10.1.guj

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
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

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

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
ItaloE
JavaBaby
[Avatar]

Membro desde: 24/08/2006 17:09:13
Mensagens: 76
Offline

Blz, dudaskank....

segue o codigo completo...

public class Teste {

/**
* @param args
*/
public static void main(String[] args) {
Formulario f1 = new Formulario();
new Thread(f1).start();

Formulario2 f2 = new Formulario2(f1.getFrame());
new Thread(f2).start();


f1.setF(f2.getF());//referencia o frame do form 2 no form 1
f2.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 teste
f1.getLabel2().setText(f2.getLabel22().getText());
f2.getLabel22().setText(f1.getLabel().getText());

}

}

Agora os formularios...

public class Formulario implements ActionListener, Runnable {
private JLabel label;

private JLabel label2;

private JTextField textField;

private JPanel panel;

private JFrame frame;

private JFrame f;

private JButton button;

private JButton button2;

public JFrame getFrame() {
return frame;
}

// construtor
public Formulario() {

}

public void montaForm() {

label = new JLabel("seu nome: ");
label2 = new JLabel("form 1");
textField = new JTextField(30);
button = new JButton("Exibir");
button2 = new JButton("Enviar");

button.addActionListener(this);

panel = new JPanel();
panel.add(label);
panel.add(textField);
panel.add(button);
panel.add(button2);
panel.add(label2);

button2.setAlignmentX(100);
button2.setAlignmentY(30);

frame = new JFrame("Meu First Form, hahhaha!!!");
frame.add(panel);

frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e) {
String texto = textField.getText();
JOptionPane.showMessageDialog(f, texto);

}


public void run() {
this.montaForm();
}

public JFrame getF() {
return f;
}

public void setF(JFrame f) {
this.f = f;
}

public JLabel getLabel2() {
return label2;
}

public void setLabel2(JLabel label2) {
this.label2 = label2;
}

public JLabel getLabel() {
return label;
}
}


Formulario 2:


public class Formulario2 implements ActionListener, Runnable {
// form 2
private JLabel label2;

private JLabel label22;

private JTextField textField2;

private JPanel panel2;

private JFrame frame2;

private JFrame f;

private JButton button2;

public JFrame getFrame() {
return frame2;
}

// construtores
public Formulario2() {

}

public Formulario2(JFrame f) {

}

public void montaForm() {

label2 = new JLabel("seu nome: ");
label22 = new JLabel("form 2");
textField2 = new JTextField(30);
button2 = new JButton("Exibir");

button2.addActionListener(this);

panel2 = new JPanel();
panel2.add(label2);
panel2.add(textField2);
panel2.add(button2);
panel2.add(label22);

frame2 = new JFrame("meu segundo frame,,heheheh!!!");
frame2.add(panel2);

frame2.pack();
frame2.setVisible(true);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e) {
String texto = textField2.getText();
JOptionPane.showMessageDialog(f, texto);
}

public JFrame getF() {
return f;
}

public void setF(JFrame f) {
this.f = f;
}

public void run() {
this.montaForm();

}

public JLabel getLabel2() {
return label2;
}

public JLabel getLabel22() {
return label22;
}

public void setLabel22(JLabel label22) {
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...

"Think!"

"Povo estúpido tem q se F..., vamo nos para mais 4 anos de estupidez e ignorância. Mas o povo tem o que merece"
aangreen
Debugger
[Avatar]

Membro desde: 21/09/2006 11:16:01
Mensagens: 58
Localização: Curitiba
Offline

Passa o texto q vc quer imprimir no outro frame pelo construtor q funciona, ja usei dessa forma
ItaloE
JavaBaby
[Avatar]

Membro desde: 24/08/2006 17:09:13
Mensagens: 76
Offline

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!!!

"Think!"

"Povo estúpido tem q se F..., vamo nos para mais 4 anos de estupidez e ignorância. Mas o povo tem o que merece"
aangreen
Debugger
[Avatar]

Membro desde: 21/09/2006 11:16:01
Mensagens: 58
Localização: Curitiba
Offline

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
JavaBaby
[Avatar]

Membro desde: 24/08/2006 17:09:13
Mensagens: 76
Offline

Vou tentar implementar aqui com essas duas aproximações então...

Vlw pelas dicas ae aangreen

"Think!"

"Povo estúpido tem q se F..., vamo nos para mais 4 anos de estupidez e ignorância. Mas o povo tem o que merece"
ct_d
Smalltalk
[Avatar]

Membro desde: 30/11/2009 13:17:20
Mensagens: 3
Offline

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
JavaGuru
[Avatar]

Membro desde: 28/11/2007 16:18:30
Mensagens: 213
Localização: Goiânia - GO
Offline

coloque o setVisible(true) apenas depois de terminar de mexer (configurar) tudo que você precisa mexer na sua janela.
ct_d
Smalltalk
[Avatar]

Membro desde: 30/11/2009 13:17:20
Mensagens: 3
Offline

CrOnNoS wrote:coloque o setVisible(true) apenas depois de terminar de mexer (configurar) tudo que você precisa mexer na sua janela.

pus o setVisible(true) depois, e continua a não mostrar o conteudo que esta dentro da janela :S
posso ter feito mal

meti assim :

não é assim que é para fazer?
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team