[RESOLVIDO] JFrame pegando dados de outro JFrame

13 respostas Resolvido
fabioklopes

Olá pessoal! Eu tentei procurar esse tópico aqui no GUJ mas não encontrei nada parecido, e caso já exista, me perdoem… Tenho uma dúvida com o JavaSwing:

Tenho um FormLogin que, ao validar as informações, ele envia para o FormPrincipal 3 informações: NomeCompleto, Usuário, PerfilAcesso e em seguida, faço um dispose() dele. Essas informações são exibidas em seus respectivos JLabel. Até aí, tudo Ok. Tudo funcionando.

Agora, quando abro um outro JFrame qualquer, e preciso fazer o .getText() dos labels do FormPrincipal, ele retorna null. Como isso? Se no FormPrincipal, eu tenho 3 labels devidamente preenchidos?

O que eu preciso fazer? O que estou fazendo de errado?

13 Respostas

Eldius

@fabioklopes eu criaria um objeto com esses atributos (um DTO simples já resolve) para passar como parâmetro na hora de chamar as outras telas…

Mas caso você tenha/precise/tenha levado o problema pro lado pessoal, como você está fazendo essa referência? Na época que mexia com Swing eu costumava passar a tela de onde queria pegar os dados como parâmetro na criação da nova tela e colocava um getValorCampo na classe principal para buscar esse valor (infelizmente só aprendi que era mais fácil passar um DTO depois de um tempo)…

fabioklopes

Olá amigo! Como sou iniciantes em Java não tenho muita experiência no DTO, mas vou dar uma olhada sobre isso. Porém, a forma que estou fazendo hoje, é assim:

(TelaPrincipal.java)

... até aqui segue o código da tela de login
try {
    TelaPrincipal tp = new TelaPrincipal();
    tp.setExtendedState(JFrame.MAXIMIZED_BOTH);
    tp.getContentPane().setBackground(Color.GRAY);

    
        tp.NOME    = rs.getString("nome");
        tp.USUARIO = rs.getString("usuario");
        tp.PERFIL  = rs.getString("nivelAcesso");

        tp.setVisible(true);

} catch (SQLException ex) {

}

dispose(); // fecha a tela de login

Quando a TelaPrincipal abre, ela vai buscar as variáveis NOME, USUARIO e PERFIL e vai preencher as respectivas JLabels que eu comentei. E isso está dando certo.

O problema começa a surgir, quando eu estou em uma outra JFrame e quero acessar essas variáveis da TelaPrincipal…

(TelaAlterarPerfil.java)

TelaPrincipal tp = new TelaPrincipal();
String nome = tp.NOME;
System.out.println(nome); // aqui retorna null

E também já tentei acessar a JLabel diretamente, assim:

TelaPrincipal tp = new TelaPrincipal();
String nome = tp.nomeUsuario.getText(); // tornei ela publica no Netbeans
System.out.println(nome); // aqui retorna null

E tudo isso me retorna null.

Pablo_Enrique_Gomes

você poderia fazer isso no construtor:

JFrame form1 = new JFrame(“TESTE”);
form1.dispose();

new MinhaClasse(lblNome.getText() , lblUser.getText() , lblNivel.getText()).setVisible(true);
// classe contendo o form2

public class MinhaClasse extends JFrame {

JFrame form2 = new JFrame(TESTE1);

private String usuario;

private String nivel;

private String nome;

public MinhaClasse(String nome , String usuario , String nivel) {

this.nome = nome;
    this.usuario = usuario;
    this.nivel = nivel;

   System.out.println("Seu Nome é " + nome + " seu usuario é " + usuario + " seu nivel é " + nivel);

}

}

Isso vai fechar a tela contendo as labels vai criar um novo JFrame com os valores

fabioklopes

Pablo… testei aqui e também não deu certo. Não sei se vale a pena detalhar isso: eu não estou usando aplicação MDI. São formulários abertos independentes.Será que isso está influenciando em alguma coisa?

Pablo_Enrique_Gomes

Acho que tem um erro msm , eu usei o dispose antes de instanciar a classe é passar os valores , em relação a MDI não tem influência n se puder manda seu codigo no pastebin pra min dar uma olhada.

fabioklopes

Como faço para postar no PasteBin?

Pablo_Enrique_Gomes

Entra com gmail é cola o codigo no textArea , dps ele via gerar um link me manda esse link pastebin:http://pastebin.com/index.php

fabioklopes

Tela Alterar Perfil: http://pastebin.com/vXn5q64A

Tela Principal: http://pastebin.com/xd1RuXnh

Não repare as inconsistências… Foi como eu disse… sou muito péssimo em Java e totalmente iniciante!

4mega

Bom dia, seguinte, eu tenho essa aplicação que uso como exemplo quando a duvida é como passar dados de uma janela para outra. Ela não se remete diretamente a tela de login e menu, e sim, de uma janela dinâmica que altera sua construção de acordo um PARAMETRO de entrada, recebido da primeira janela, em seguida ele retorna o valor selecionado da tabela. Se tiver duvidas sobre, pode perguntar, se ainda n conseguir desenvolver essa troca de dados entre janelas, monto um exemplo mais direto a seu problema.

JanelaDinamicaDeSelecao.rar (25,5 KB)

Lembrando que minha aplicação esta orientado a objeto, recomendo que sua aplicação também esteja, facilitará horrores no desenvolvimento.

alexandregsjr
Solucao aceita

Posso estar equivocado, @fabioklopes, mas pelo que ví, no fonte TelaAlterarPerfil.java você está dando um new TelaPrincipal(), e não buscando o objeto já existente. Assim, o objeto criado na classe TelaAlterarPerfil vai estar com os atributos não inicializados.

Você tem que arranjar uma maneira de buscar a instância já existente, ao invés de criar um objeto TelaPrincipal novo.

Outra sugestão: pelo que eu entendi, você está instanciando a TelaPrincipal dentro da própria classe. Sugiro você ter uma classe principal do programa (ex: “Programa.java”), e dentro dela você trabalhar com as telas. Creio que assim você possa fazer essa passagem de valores entre as telas.

fabioklopes

(sacanagem, sou um usuário iniciante e só posso referenciar 2 usuários…)

Olá Alexandre!

Cara, realmente, é o que você disse: eu estou dando um new TelaPrincipal() dentro de outra classe e isso, automaticamente, inicia o meu objeto como NULL. Eu só removi o a instância, referenciei o objeto desejado chamando a classe por completo e… PUFF… já deu certo!

@4mega Amigo… Sem querer, o seu exemplo me ajudou a construir um JTable na mão, sem usar o DefaultTableModel. Eu precisava MUITO aprender isso… Valeu cara!

@Pablo_Enrique_Gomes Irmão… agradeço muito a sua ajuda também e principalmente por ter me ensinado o truque do Paste Bin… hehehe! Valeu!

Obrigado aos demais, já que sou iniciante e não posso colocar mais de 2 referências na resposta… kkk!

Pablo_Enrique_Gomes

@fabioklopes pow cara não te respondi por que tive que fazer umas coisas aqui , ai fiquei meio ocupado mas a sua duvida foi sanada ?

fabioklopes

Oh irmão! Fica tranquilo… Eu sei como são as coisas… Mas deu tudo certo sim… O Alexandre viu o código lá no PasteBin e viu que eu estava instanciando uma classe dentro da outra… Por isso iniciava como NULL… ou seja… POG total de iniciante em Java… hahaha

Mas agradeço MUITO a força que você deu também… Espero poder contribuir para o site, assim como fizeram para comigo!

Grande abraço!

Criado 4 de janeiro de 2017
Ultima resposta 6 de jan. de 2017
Respostas 13
Participantes 5