[RESOLVIDO] JFrame pegando dados de outro JFrame

13 respostas Resolvido
F

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

E

@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)…

F

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.

P

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

F

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?

P

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.

F

Como faço para postar no PasteBin?

P

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

F

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!

4

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.

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

F

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

P

@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 ?

F

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