Obter objeto já instanciado em outro form

Pessoal, boa tarde.

Eu estou com uma duvida, eu queria saber como eu posso chamar os valores de um objeto que ja foi declarado. é meio noob, mas vamos lá.

tenho a classe separada usuario.java
e utilizo as variaveis usuario e nivel

quando dou login, eu instancio
Usuario usr = new Usuario();
usr.usuario = “joao”;
usr.nivel=“adm”;

chamo o form principal, e dou um dispose na tela login.

porém eu não consigo acessar essa informação na minha tela principal
até pq pela lógica que eu usei, dando um novo Usuario usr = new Usuario(); eu estou instanciando outro objeto, certo ?
Como eu posso usar aquele mesmo que foi criado na tela login ?

Procurei e não achei =(

Abraços !!

bem na tela login vc terá um atributo do tipo Usuario, ai vc instancia e usa ele e se algum metodo de outra classe precisa dele para realizar certa verificação vc poderia passar ele como parametro, estaria resolvido seu problema.

MInha mente funciona ainda em modo estruturado, anos e anos com isso, isse me lembra mto o request.

Poderia me dar um exemplo ?

Abraços e obrigado !

Se vc for autenticar o usuário em toda sessão que for utilizar, seria interessante vc acessar o usuário de forma estática. Além disso, se vc kisesse fazer autenticação antes de qualquer operação, recomendaria o uso do AspectJ e resolver o problema via Aspecto. Isso é um dos exemplos clássicos onde um aspecto resolve sua vida facilmente…

tp assim:

package Controller;

import java.awt.Frame;
import java.util.ArrayList;

import javax.swing.JTextArea;

import View.JogoDaVelha;

public class Console {
	
	private JogoDaVelha jogoDaVelha = null;
	private ArrayList<Mensagem> listaMensagens = new ArrayList<Mensagem>();
	

                public Console(Frame frame){
                   jogoDaVelha = (JogoDaVelha) frame;
                }

	public void addMensagem(Mensagem mensagem){
		listaMensagens.add(mensagem);
		atualizaConsole();
	}
	
	public void atualizaConsole(){
		String texto = "";
		JTextArea console = jogoDaVelha.getJTextArea1();
		for(int i=0; i<listaMensagens.size(); i++){
			texto += listaMensagens.get(i).getConteudo()+"\n";
		}
		console.setText(texto);
	}
	
	public void limpaConsole(){
		listaMensagens = new ArrayList<Mensagem>();
		jogoDaVelha.getJTextArea1().setText("");
	}

}

neste exemplo acima eu tenho um frame aberto na tela (JogoDavelha) e minha classe console terá que utilizar este frame então tenho um atributo dessa classe que é do tipo JogoDavelha e no constructor da classe ele recebe um frame como paraemtro (o frame aberto) e jogo este frame naquele atributo assim eu tenho a instancia do objeto que ja esta criado e posso manipula-lo ao em vez de criar uma nova instancia desse objeto, procure ler sobre orientação a objetos.

Acho que vc está querendo criar uma espécie de Sessão Desktop… Usa uma classe Stática… quando logares, essa classe vai receber os atributos do teu usuário e guardar como dados únicos…

Sempre que precisares do teu usuário é só fazer Usuario.getUser();

Falows :wink: qualquer dúvida posta aí…

isso que o adriano falou tb é uma boa soluçao, assim toda ver que precisar daquela informação vc pode acessála sem precisar ficar instanciando um novo objeto, usando static.

Bom vou por meu código para ficar melhor.

as partes principais da classe usuario nessa minha duvida

classe usuarios.java

 public String getPerfil() {
        return this.perfil;
    }

public boolean autenticaUsuario(String _usuario, String _senha) {
        dds.getDadosMaquina();
        String senhaCrip = null;

       try{
        senhaCrip = hsh.toPassword(_senha);
          } catch (NoSuchAlgorithmException e) {
        erro.msgErro(e.getMessage(), "Usuarios.AutenticaUsuario.Criptografia", "Erro ao criptografar dados!\n");
          }
        boolean valida = false;
        try {   

            conn.connectOra();
            
            Statement sql = conn.con.createStatement();
            ResultSet rset = sql.executeQuery("SELECT ID_USUARIO, SENHA, ATIVO, ID_LISTA_PERFIL,LOGIN_ACESSO"+ 
                                             " FROM TAB_USUARIOS WHERE LOGIN_ACESSO = '"+ _usuario.toUpperCase()  +"'AND SENHA= '"+ _senha+ "'");
            while (rset.next()) {
                this.login = rset.getString("ID_USUARIO");
                this.ativo = rset.getString("ATIVO");
                this.perfil = rset.getString("ID_LISTA_PERFIL");
                System.out.println(getPerfil());
                valida = true;
            }
            if (getRetornaLogin() == null && getRetornaSenha() == null) {
                valida = false;
                JOptionPane.showMessageDialog(null, "Usuário e/ou senha inválidos! Tente novamente.", "Dados inválidos.", JOptionPane.ERROR_MESSAGE);
            }
            if (getRetornaAtivo().contains("N")) {
                JOptionPane.showMessageDialog(null, "Usuário '" + _usuario.toUpperCase() + "' está bloqueado!\nFavor entrar em contato com o administrador do sistema.", "USU�RIO BLOQUEADO", JOptionPane.ERROR_MESSAGE);
                valida = false;
            }
            if (valida == true) {
                sql.execute("INSERT INTO TAB_BANCO_ACESSO (ID_ACESSO, ID_TIPO_PROJETO, USUARIO, SENHA, STRING_CONEXAO, BANCO_DE_DADOS) VALUES (SEQ_ID_ACESSO.NEXTVAL, 4, '" + _usuario.toUpperCase() + "','" + _senha.toUpperCase()+ "','192.168.0.38','DBFPORTALWS')");
                 
            }
            sql.close();
            conn.con.close();
        } catch (SQLException e) {
            erro.msgErro(e.getMessage(), "Usuarios.autenticaUsuario", "Erro SQL:\nVerifique se seu usuário já está logado em outra máquina\n");
            valida = false;
        }
        return valida;
    }

login.java

public class Login extends javax.swing.JFrame {

    Data dt = new Data();
    ConexaoOra conn = new ConexaoOra();
    Usuarios usu = new Usuarios();
    DadosSistema dds = new DadosSistema();
    MenuPrincipal mnp = new MenuPrincipal();
        

    public Login() {
        initComponents();
        setTitle("Seja bem vindo! Digite seus dados para acessar o sistema.");
    }
// mtos códigos aqui 


private void btOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOkActionPerformed
    try {

        String usuario = txtLogin.getText();
        String senha = txtSenha.getText();
        String db = null;
 

    /*    Scanner input = new Scanner(new File("Data_Entry\dataEntryConection.imb"));
        db = input.next();
        db="O";*/
        if (usu.autenticaUsuario(txtLogin.getText(),txtSenha.getText()) != false) {
            
            mnp.setVisible(true);

            this.dispose();
        }
    } catch (Exception ex) {
       ex.printStackTrace();
    }
           
            }

MenuPrincipal.java


//inicio 

public class MenuPrincipal extends javax.swing.JFrame implements ActionListener {

    DadosSistema dds = new DadosSistema();
    LogIO logio = new LogIO();
    Eventos eve = new Eventos();
    Data dt = new Data();
    Usuarios usu = new Usuarios();
    ConexaoOra conn = new ConexaoOra();
    private javax.swing.Timer timer;
    Erro erro = new Erro();
    private String glUltimaData;
    private String glUltimaHora;
    //Quando o projeto é aberto essa variável recebem o cod do cliente
    //para que na tela de digitação ele saiba qual é o projeto
    private static String codClienteProjeto;
    private static String nomeProjeto;
    

    public MenuPrincipal() {
        try {
            initComponents();
            setLocation(0, 0);
            dds.getVersao(conn.toString());
            disparaRelogio();
            setTitulo("");
        } catch (Exception e) {
            Logger.getLogger(MenuPrincipal.class.getName());
        }
    }

    public void setTitulo(String _modulo) {
        setTitle(dds.getSistema() + " Versão " + dds.getVersao() + " | " + dds.getDataAtualizacao() + " | " + _modulo);
    }

    public void personalizaAcesso() {
        if (txtPerfil.getText().equals("ADMINISTRADOR") == true) {
           DesktopPane.setVisible(true);
        } else if (txtPerfil.getText().equals("SUPERVISOR") == true) {
            DesktopPane.setVisible(true);
        } else if (txtPerfil.getText().equals("PADRÃ?O") == true) {
            DesktopPane.setVisible(false);
        }
    }

// Aqui que ele deve pegar o usuario, porém la em cima ja está instanciado um novo, como o código ja veio pronto, que estou confuso.
//GEN-FIRST:event_formWindowOpened
    try {
        eve.getConectou();
        txtData.setText((String) dt.getData());
        txtPerfil.setText(usu.getPerfil());
        System.out.println("Principal:" + usu.getPerfil());
        txtUsuario.setText(usu.getUsuCodigo());
        if(usu.getGrupoProjetosAtivo().equals("S")){
            txtGrupoProjeto.setText(usu.getGrupoProjetos());
        }else{
            txtGrupoProjeto.setText(usu.getGrupoProjetos());
            txtGrupoProjeto.setForeground(Color.red);
        }
        personalizaAcesso();
    } catch (Exception e) {
        Logger.getLogger(MenuPrincipal.class.getName());
    }

   
    }

Digamos ai está a parte principal

Vais fazer algo + ou - assim:

[code]/**
*

  • @author aohana
    */
    public class Usuario {

    private static String nome = “”;
    private static String senha = “”;
    private static int perfil = 0;

    /**

    • @return the nome
      */
      public static String getNome() {
      return nome;
      }

    /**

    • @param aNome the nome to set
      */
      public static void setNome(String aNome) {
      nome = aNome;
      }

    /**

    • @return the senha
      */
      public static String getSenha() {
      return senha;
      }

    /**

    • @param aSenha the senha to set
      */
      public static void setSenha(String aSenha) {
      senha = aSenha;
      }

    /**

    • @return the perfil
      */
      public static int getPerfil() {
      return perfil;
      }

    /**

    • @param aPerfil the perfil to set
      */
      public static void setPerfil(int aPerfil) {
      perfil = aPerfil;
      }
      }[/code]

Um bean de usuário só pra guardar os dados do mesmo… Recomendo que vc faça a validação do Login e da Senha em uma outra classe…

Quando vc logar vc vai fazer isso

Usuario.setNome("Nome do Usuario"); // e os demais SETs vão aqui

Quando precisar recuperar esse nome

nome = Usuario.getNome(); // e os demais GETs vão aqui

Dica: tira esses “_” do início da variável, isso não é boa prática de nomenclatura.

Certo então no arquivo que eu preciso obter a informação eu utilizo

[code]
private Usuario usuario1 = null;

// criado anteriormente na Login?
usuario1 = (Usuario) usr;[/code]

isso mas usr vai ter que ser passado como parametro neh, pode ser no constructor por exemplo:

public nomeDaClasse(Usuario usr){
  usuario1 = (Usuario) usr;
}

//ou entao num metodo vc pode passar o parmetro

public void nomeMetodo(Usuario usr){
   usuario1 = (Usuario) usr;
}

se for Static não…

lembre static indica que esse valor atribuído quando vc loga vai existir apenas um para toda aplicação, variáveis staticas são para classes, não para objetos, logo tudo o que você precisa é de uma chamada ao método direto pelo nome da classe como emNomeDaClasse.nomeMetodo();

Qualquer coisa, posta aí a dúvida…

Cara vamos tentar esclarecer alguns pontos sobre static, acho que já até usei esse exemplo aqui, mas como deu tão certo para uns alunos meus, então vou usar de novo…

é uma história

"Um certo homem teve 2 filhos, Pedro e Marcos, os irmãos adoravam jogar futebol logo o bom homem, que também era bom pai comprou bola para seus filhos

public class Filho {
    private Bola bola;
    
    public Bola jogarBola() {
    // chutar bola
    }
}

Aí o homem fez o seguinte

Filho pedro = new Filho(); Filho marcos = new Filho(); pedro.jogarBola(); marcos.jogarBola();

Aquele homem tinha um bom coração e percebeu que seus filhos depois de um tempo estavam ficando desunidos, pois não jogavam mais bolas juntos, então ele teve uma idéia… A solução era deixar que ambos os filhos brincassem com apenas uma bola, o que ele fez ???"

É claro que não é o melhor exemplo do mundo, mas dá pra entender legal…

Responda aí…

humm
jogando a mesma bola?
complico !