Olá…
Eu tenho o seguinte problema.
Tenho um JFrameA e um JFrameB.
O JFrameA chama o JFrameB, porém o JFrameB deve retornar um valor ao JFrameA após finalizar-se.
Como eu faço para receber o valor no JFrameA depois que o JFrameB finalizar. Seria uma especie de chamada assincrona, onde o JFrame a fica esperando a finalização do JFrameB para receber um valor?
Em java, a passagem de parâmetros. de objetos é sempre por referência(não considera String pq String tem um comportamento diferente). Portanto, se tu quiser retornar um valor do jframe B para A, ao chamar o JFrame B, passe um objeto, e defina o valor desse objeto em B. Assim, quando tu voltar para A, teu objeto vai estar com o valor definido. Isso pq tu passou apenas uma referência a um endereço de memória, e não o valor relativo ao objeto.
Fernando Rosa
Ao invés de um JFrame no Frame B, use um JDialog.
Torne esse JDialog modal. Isso garante que o comando frameB.setVisible(true), usado no frameA, só retorne depois que o frameB fechar.
Depois disso, é só fazer o que o colega falou. Usar o FrameB como um objeto normal. Define alguma propriedade nele com o valor que você quer e depois leia no frame A:
Vaja o exemplo abaixo.
Seria de um Dialog para ler um usuário. E o FrameA mostra os usuários já cadastrados.
Os códigos estão incompletos, mas já dão a noção de como fazer.
No frame B:
[code]
public class NewUserDialog extends JDialog
{
private User user;
public SomeDialog() {
super();
setModal(true);
setTitle("Novo usuário");
//resto do código aqui.
user = null;
}
//Retorna o usuário preenchido na dialog.
public User getUser() {
return user;
}
//---- Ações chamadas em botões
private void onCancel() {
dispose(); //user ainda é null.
}
private User onOk() {
if (!validaCampos()) //Valida os campos do formulário
return; //Não confirma
user = newUserFromFields(); //Cria um novo usuário com base nos campos preenchidos
}
}[/code]
No Frame A:
[code]public void UserFrame {
//Aqui vai a criação do JFrame, contendo a lista de usuários e botões de
//inserir, remover, etc.
//Chamado quando se clica no botão de novo usuário
public void onNewUser() {
NewUserDialog dialog = new NewUserDialog();
dialog.setVisible(true);
if (dialog.getUser() == null)
return; //Usuário cancelou a inserção
//Caso contrário, põe ele na tabela de usuários.
userTableModel.add(dialog.getUser());
}
}[/code]
Valeu pelas dicas galera!