Ir ao conteúdo
  • Cadastre-se

GUI criada em class sem ser a main


Posts recomendados

Olá, eu criei uma class em um arquivo ".Java" no meu projeto. Essa class se chama GuiLogin e nela tem a função GuiLogin, que faz com que a janela de login apareça, porém eu não sei como ativa-la na class Main, que tem o "public static void main(String[] args)" e que fica no arquivo "Main.Java". Eu já chamei a class GuiLogin na class Main, porém eu não sei como ativar a janela. Segue abaixo o código das class Main e GuiLogin:

package gui;
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        GuiLogin login = new GuiLogin();
        login.setVisible(true);
    } 
}
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GuiLogin extends JFrame{
    private JTextField tfUsuario;
    private JPasswordField pfSenha;
    private JButton btnLogar;
    private JButton btnCancelar;
    private JLabel lbLogin;
    private JLabel lbSenha;
    private JLabel lbLoginErrado;
    
    public GuiLogin(){
        inicializarComponentes();
        //definirEventos();
    }
    
    private void inicializarComponentes(){
        setTitle("Login");
        setBounds(0, 0, 285, 200);
        setResizable(false);
        setLayout(null);
        tfUsuario = new JTextField(20);
        pfSenha = new JPasswordField(20);
        lbLogin = new JLabel("Usuario:");
        lbSenha = new JLabel("Senha:");
        btnLogar = new JButton("Logar");
        btnCancelar = new JButton("Cancelar");
        lbLoginErrado = new JLabel("Combinação inválida!");
        
        lbLogin.setBounds(40, 10, 100, 20);
        tfUsuario.setBounds(140, 10, 100, 20);
        lbSenha.setBounds(40, 35, 100, 20);
        pfSenha.setBounds(140, 35, 100, 20);
        btnLogar.setBounds(35, 120, 100, 30);
        btnCancelar.setBounds(145, 120, 100, 30);
        add(lbLogin);
        add(tfUsuario);
        add(lbSenha);
        add(pfSenha);
        add(btnLogar);
        add(btnCancelar);
    }
}

Eu gostaria que ao invés de ter que usar o comando login.setVisible(true); que apenas faz com que a janela apareça, eu gostaria de chamar a função GuiLogin, porque após o login do usuario a class GuiLogin iria automaticamente inicializar a janela principal do programa, sem a necessidade da interferência da class Main. Não quero ter que fazer uma função na class GuiLogin que retorne uma boleana para o Main dizendo se o login foi feito com sucesso ou não nem nada parecido, até pensei em colocar a class GuiLogin no arquivo Main.Java e todas as outra janelas em arquivos java a parte. Eu gostaria de saber se tem alguma forma de chamar a janela sem ser usando o comando login.setVisible(true); assim como eu comentei? Se alguém tiver uma sugestão como: "Colocar a class GuiLogin no arquivo 'Main.Java' seria a forma mais corretae eficiente de fazer o programa" ou algo do tipo por favor comente.

Link para o comentário
Compartilhar em outros sites

@zopek O problema é que se eu fizer isso sem alterar o login.setVisible(true); no main a janela do login não some. Se eu colocar essa class depois da class main que é a primeira a ser executada pois tem o public static void main(String[] args) ela será executada automaticamente?

Link para o comentário
Compartilhar em outros sites

@D4ni31 Não precisa voltar na main para isso.

 

Pense comigo:

login.setVisible(true);

Nada mais é do que uma chamada de uma "função" (termo errado, mania de C++) do objeto do tipo "JFrame".

Isso você faz de dentro para fora: main -> login (login está recebendo a informação "true" para setVisible).

Mas como conseguir independência? Modificar os próprios valores?

this.setVisible(false);

Nada mais é do que se alto chamar: login -> login.

 

Se quiser aprofundar: This. em Java

Link para o comentário
Compartilhar em outros sites

@D4ni31 Bem...

 

2 minutos atrás, D4ni31 disse:

Mas em relação ao que tinha escrito de colocar a class no mesmo arquivo que a main, o que acontece?

Isso vai virar uma salada, é muito melhor criar classes\objetos de forma independente e importa-los, minha sugestão seria usar uma interface principal para torna-se a "main".

 

4 minutos atrás, D4ni31 disse:

E o programa não permite que eu chame a função GuiLogin que cria a janela, por que?

Isso depende da IDE e da VM de Java instalado, superficialmente é porque você quer instanciar um objeto idêntico já criado (com mesmo ID\Thread), e isso da falha.

adicionado 7 minutos depois

@D4ni31 Bem irei dormir, assim que acordar, postarei um código de exemplo (8h AM).

Coloque também suas duvidas, e responderei assim que possivel. :thumbsup:

Informe também sua IDE (Eclipse, NetBeans, BlueJ...)

 

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, zopek disse:

@D4ni31 Bem...

 

Isso vai virar uma salada, é muito melhor criar classes\objetos de forma independente e importa-los, minha sugestão seria usar uma interface principal para torna-se a "main".

 

Isso depende da IDE e da VM de Java instalado, superficialmente é porque você quer instanciar um objeto idêntico já criado (com mesmo ID\Thread), e isso da falha.

@zopek Então! Mas se eu trocar o nome da função GuiLogin por outra a IDE aponta como se fosse um erro e manda recolocar o nome da função como GuiLogin, acho que isso acontece por conta do extends JFrame colocado no cabeçalho da class. Concordo com a ideia de usar a interface principal como sendo a main, porém a primeira coisa que aparecerá para o usuário é a tela de login, e eu não sei como interligar a class que inicializará o menu principal com a inicialização da tela de login. Se eu colocasse o comando "login.setVisible(true);" iria aparecer a tela de login mas logo em seguida iria inicializar a tela principal mesmo o usuario não tendo efetuado o login.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!