Dúvida para criar tela de login (SEM EVENTO, SOMENTE GUI)

Primeiramente queria deixar claro aqui que meus conhecimentos são “básicos” e que minha dúvida provavelmente tem uma resolução bem simples mas que eu não achei ainda -;

Tenho que desenvolver uma tela similar a esta aqui (sem usar o NetBeans)
"https://4c26faa5-a-62cb3a1a-s-sites.googlegroups.com/site/profnewtonjava/exerciciosframes/Frame-Atividade-1.jpg?attachauth=ANoY7cqt84tFtndds3AJr8KSle3hi2vpAxjl-_3hAwEXSq1ypMYgo3HTImkc_Xr3j6JQ-fSiUOdTPJVB-jQGtRoG_tNa8_0JTWsPpwXHnp9XE7-GEveIV8F-uoW73WBk0MTYbrnKhufzUMP7-6fD5xQ7gt1XAqF0Xf7dpsGw8RC4ErVxmSlNHNDasnBG9qKoFQBq2qEk3DVS1m62OoAXWz_h90N-pj0NAkVBF4kgpqfyc7sZjJVw-S-6knP78-hKmIObKaypHzDD&attredirects=0

Depois de quebrar a cabeça por 2 horas o mais longe que alcancei foi esse frame:
Sem%20t%C3%ADtulo "

//não posso inserir duas imagens no post, desculpem o link

Não entendo o motivo de os botões ficarem tão achatados e de possuir uma área branca abaixo do rodapé tão grande mesmo eu não tendo colocado um JPanel vazia ali.

Obs: Em relação as cores das fontes eu ainda não coloquei pois quero deixar por ultimo.

Código: public class AcessoAoSistema{
//private JPanel acessoAoSistema = new JPanel();
private JFrame frame = new JFrame();
private JPanel areaLogin = new JPanel();
private JPanel areaSenha = new JPanel();
private JPanel areaDeAcesso = new JPanel();
private JTextField login = new JTextField(5);
private JPasswordField senha = new JPasswordField(5);
private JPanel rodape = new JPanel();
private JPanel botoes = new JPanel();
private JPanel cabecalho = new JPanel();
private JLabel titulo = new JLabel(“Acesso ao Sistema”);
private JLabel textoUsuario = new JLabel("Usuário: ");
private JLabel textoSenha = new JLabel("Senha de acesso: ");
private JButton btnAcessar = new JButton(“Acessar”);
private JButton btnFechar = new JButton(“Fechar”);
private JLabel sistema = new JLabel(“Sistema XPTO”);
private JLabel data = new JLabel(“03/09/2012”);

private AcessoAoSistema(){
    frame.setTitle("Tela de login");
    frame.setSize(400,400);
    frame.setLayout(new GridLayout(4,1,5,5));


    cabecalho.add(titulo);

    areaLogin.add(textoUsuario);
    areaLogin.add(login);
    areaLogin.setLayout( new GridLayout(1,1,10,10));

    areaSenha.add(textoSenha);
    areaSenha.add(senha);
    areaSenha.setLayout( new GridLayout(1,1,10,10));

    botoes.add(new JLabel(""));
    botoes.add(btnAcessar);
    botoes.add(new JLabel(""));
    botoes.add(new JLabel(""));
    botoes.add(btnFechar);
    botoes.add(new JLabel(""));
    botoes.setLayout(new GridLayout(2,3,5,5));

    areaDeAcesso.add(areaLogin);
    areaDeAcesso.add(areaSenha);
    areaDeAcesso.add(botoes);
    areaDeAcesso.setLayout(new GridLayout(3,1,10,10));

    rodape.add(sistema);
    rodape.add(new JLabel(""));
    rodape.add(data);
    rodape.setLayout(new GridLayout(1,3,10,10));


    frame.add(cabecalho);
    frame.add(areaDeAcesso);
    frame.add(rodape);


    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
public static void main (String[]args){
    new AcessoAoSistema();
}

}

Precisas estudar os gerenciadores de layout (layout managers).
Não é trivial de aprender.
Do meu ponto de vista, telinhas não são atividades para iniciantes, até porque os frameworks de telas utilizam uma série de conceitos e padrões que talvez você ainda não aprendeu.

2 curtidas

Seguindo o que o @staroski disse: Java Tutorials - Gerenciadores de Layout.

Obrigado

Tem algum motivo pra nao usar Netbeans ou Eclipse pra desenhar telas? É uma complicação desnecessária deixar de usar, eu nunca fiz uma tela desktop sem ser pelo modo visual.

Do meu ponto de vista, a partir do momento que você aprende e entende como funcionam as classes dos frameworks de telas, você acaba preferindo fazer tudo na mão.
Os editores visuais geram código demais, muitas vezes incluem chamadas de métodos desnecessárias.

Pelo menos pra mim isso nunca foi problema, pouco importa o código gerado pelo editor, a manutenção era no editor, não tinha esse purismo de ficar olhando o código que era responsabilidade do editor.

Tela enche mesmo o saco, ainda mais com gerente de Layout que estica, encolhe e coisa e tal.
Mas tem a opção de posicionamento absoluto. Dessa forma você vai acertar de primeira.
Porem os componentes ficam engessados na posição x e y.

Em relação a fazer a tela pela ide ou alguma gui, tudo depende, tem coisa que você sabe que lá dentro tá feio pacas, mas faz o que você precisa, então dar manutenção na tela pela própria ide beleza.

Tem horas que a solução da ide pode não ser compatível com o que você quer, então vamos fazer na mão.

E’ bom saber fazer nas duas formas.

Na época que trabalhava com desktop usava posição absoluta mesmo, era bem produtivo e atendia 100%, pois as resoluçōes de telas eram bem controladas. Hoje realmente deve ser mais complicado.

Na verdade é porque isso é um trabalho pra faculdade da disciplina de programação II, então o intuito pelo menos por enquanto é aprender a construir as interfaces e saber como funcionam pra depois partir pro Netbeans

1 curtida

Entendi, academicamente é importante mesmo, mas no mercado o mais importante é a produtividade e qualidade para o resultado. Enquanto seu colega está sendo produtivo usando editor visual e fazendo uma tela bonita rapidamente, você estaria lá escovando bits ainda.

Acredito que já foi dito aqui. Tem que definir os layouts como nulo p conseguir trabalhar melhor com essas telas. Vai dar um pouco de trabalho agora mas vamos lá
Na tela principal clique com o direito e vai em definir layout = layout nulo
Depois faça com os outros componentes se sumir, reposicionar no painel frame navegador geralmente a direita.
Pode usar também o trazer p frente ou enviar p traz
Se os botões não voltarem configure a propriedade prefered size
Se quiser começar do zero não esquece de marcar os layouts nulos
Boa sorte não esquece de marcar como resolvido