belmonte:
Grinvon:
Exemplo:
Sua classe A deve executar uma rotina quando a classe B for fechada.
Nesse caso temos.
Classe A chame Classe B.
Classe B herda ou cria intância de JFrame (JDialog, JInternalFrame, o que seja.)
Em classe A
public void executarOperacaoDepoisDeB() {
//meu código aqui
}
.
.
.
ClasseB b = new ClasseB(this); //passa instância de A para B.
.
.
.
Em B temos:
private ClasseA a;
public ClasseB(ClasseA a) {
this.a = a;
.
.
.
}
public void internalFrameClosed(InternalFrameEvent e) {
a.executarOperacaoDepoisDeB(); //chama método em A
}
Você pode implementar a javax.swing.event.InternalFrameListener.
Bom, essa é uma das formas de se fazer isso. Outra forma seria por thread.
seguinte:
ClienteTela.java
PedidoTela pTela = new PedidoTela();
public ClienteTela(PedidoTela pTela) {
this.pTela = pTela;
}
private void formWindowClosed(java.awt.event.WindowEvent evt) {
pTela.executarOperacaoDepoisDeCliente();
}
PedidoTela.java
ClienteTela cTela = new ClienteTela(this);
public void executarOperacaoDepoisDeCliente() {
jTxtCodCliente1.setText(this.jTxtCodCliente2.getText());
//sendo jTxtCodCliente1 da classe PedidoTela.java e jTxtCodCliente2 da classe ClienteTela.java
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new ClienteTela().setVisible(true);
}
não rolou, deu erro...
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
o q estou fazendo errado?
Amigão, se tu me ignorar mais uma vez não respondo mais este tópico! :roll:
Veja bem, você precisa fazer uma classe "enxergar" a outra.
Problema: Ao abrir a consulta, e a mesma ser efetuada, pegar o código em questão e enviar ao formulário pedinte.
Vamos fazer assim, a classe A é o seu pedido, e a B é a classe de consulta.
Em tese, precisamos fazer com que a classe A, crie uma nova instancia da classe B, enviando para esta instancia a sua própria instancia (de A), para que, a classe B, encapsule A, e saiba que deve enviar o seu retorno para ela, quando ela for fechada.
Consideramos o código a nível de interfaces:
public interface Receptor {
void setResult(Object result);
Object getResult();
void notifyWork();
}
public interface Emissor {
void setReceptor(Receptor owner);
}
public class A implements Receptor extends JFrame.. {
//pode usar generics
private Object result;
public void notifyWork() {
txtCodigo.setText(((String)getResult());
}
public void setResult(Object result) {
this.result = result;
}
public Object getResult() {
return result;
}
método_que_abre_a_consulta {
B consulta = new B();
B.setReceptor(this); //veja que vc está mandando uma instancia de A para B
B.setVisible(true);
}
}
public class B implements Emissor ... {
private Receptor receptor;
public void setReceptor(Receptor receptor) {
this.receptor = receptor;
}
metodo_que_executa_pesquisa {
//fim da pesquisa
getReceptor().setResult(txtCodigo.getText());
getReceptor().notifyWork();
//fecha a pesquisa
this.dispose();
this.setVisible(false);
}
}
Dê uma olhada no JDialog e veja seu construtor modal.. também pode ser útil!