Comunicação entre objetos

3 respostas
allan_ablaze

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?

3 Respostas

Fernando_Generoso_da

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

ViniGodoy

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:
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
    }
}
No Frame A:
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());
        }
}
allan_ablaze

Valeu pelas dicas galera!

Criado 25 de julho de 2008
Ultima resposta 28 de jul. de 2008
Respostas 3
Participantes 3