GUI, e agora?

17 respostas
wesleysanches

Olá a todos.
Peguei o jeito no JAVA, conheci todos os seus aspectos básicos, Tipos de Dados, Variáveis, Operadores, Conversão de Tipo, If’s Else’s, While, For, Try, Cath e etc …

Mas agora resta eu entrar em contato com a interface gráfica, utilizando o Swing, mas ai vem as dúvidas. Pq SWING e não AWT?? Qual é melhor ??
Devo usar IDE NetBeans ou programa tudo na mão mesmo ??
Como faço para os objetos ficarem aonde eu quero em um JFrame como posição X e Y ??

Me ajudem por favor, dei uma lida em alguns artigos, até fiz algumas janelinhas, mas não entendi legal não, cada um é de um jeito e nem sei qual o certo. Principalmente com relação ao Layout, quero mesmo e colocar os controles aonde eu quero (Absolute em CSS).

Gente vlw a todos !!

17 Respostas

CrOnNoS

sobre o absolute, basta você colocar o layout como null setLayout(null);
Assim você vai precisar sempre definir o Size e Location dos componentes para eles aparecerem no frame.

viniciusfaleiro

Particularmente eu acho loucura fazer os componentes na mão se já tem uma ferramenta para isso… O AWT é muito pobre em recursos de componentes (não tem nem uma Table pra vc trabalhar). Outra coisa. estude bem os tipos de layout, vc vai ter que adptá-los a ele se quiser manter a portabilidade do seu programa. Corrijam-me se estiver errado, más a partir do momento q vc seta o layout como null vc assume o risco de seus componentes não ficarem posicionados no mesmo lugar em outro OS.

Marky.Vasconcelos

AWT é velho xD

Aprenda a usar gerenciadores de layout como o MigLayout.

Eu gosto de programar as telas na mão e depois de um tempo voce ve que a manutenção é até mais facil.

NÃO USE NULL LAYOUT OU ABSOLUTE LAYOUT (como voce preferir chamar), ele não garante que seu programa apareça igual entre SO’s diferente nem no mesmo SO com resoluções de telas diferentes.

Marlon_Meneses

viniciusfaleiro, vc está corretíssimo!!!
e tb pode variar de acordo com a resolução
pra evitar esse problema, eu costumo usar borderlayout e dentro de cada regiao uso um panel em flowlayout mas isso convem de cada um usar!
com certeza é bem melhor fazer uma janela desktop usando uma ferramenta para isso, mas eu sugiro primeiro treinar na mao pq soh assim pra realmente entender como o swing funciona de verdade!!! com uma ferramenta grafica fica tudo “mastigado” e o programador acaba se acostumando e usa codigos sem saber o por que e quando, soh sabe q tem pq a ferramenta coloca!!

fica aih a minha opniao

Marky.Vasconcelos

Fora o fato de IDE’s que geram código de telas praticamente vomitam um monte de mr# para montar uma tela seja o tamanho que for.

Apesar que já usei o JGoodies e gostei do código que ele gera, muito distante do NetBeans.

Eu sempre uso um JPanel maior com o MigLayout e varios outros sub-panels que variam de acordo com a necessidade mas normalmente é o MigLayout também.

wesleysanches

Legal pessoal …

Mas assim … Alguém conhec euma boa apostila sobre SWING ?? Q explica tudo certinho na mão mesmo ??
E Outra coisa:

JFrame é a janela certo ?
JPanel é o conteúdo dentro da janela aonde coloco os componentes certo ??

Vlw pessoal !!

bestlinux

Recomendo você dar uma olhada no BorderLayout.

E também, caso queira recursos um pouco mais avançado, o SwingX

Eu uso o NetBeans (apesar que no começo queria esmurrar a tela do computador quando fazia interface nele)

wesleysanches

Pessoal, fiz uma janelinha ridicula, sem componentes, por enquanto é isso mesmo neh ?? Tah certo ??

import javax.swing.*;

public class MinhaJanela
{
    // Constructor
    public MinhaJanela()
    {
        // Cria o objeto janela e define o titulo da janela
        JFrame Janela = new JFrame("Minha janela em JAVA");
        // Procedimento padrão ao clicar no X da janela
        Janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Cria a janela (Na verdade não sei ao certo oq é o pack())
        Janela.pack();
        // Define o tamanho da janela
        Janela.setSize(300, 90);
        // Alinha a janela ao centro da tela
        Janela.setLocationRelativeTo(null);
        // Define a janela como visivel
        Janela.setVisible(true);
    }

    // Inicio do programa
    public static void main(String[] argsv)
    {
        new MinhaJanela();
    }
}

Falta add os componentes somente, mas nem sei como faço isso, alguém tem alguma idéia ??

Vlw a todos !!

S
import javax.swing.*;   

public class MinhaJanela   
{   
    // Constructor   
    public MinhaJanela()   
    {   
    	
    	// Cria o objeto janela e define o titulo da janela   
        JFrame Janela = new JFrame("Minha janela em JAVA");   
        //Cria o botão
        JButton botao = new JButton("Click");
        //Adiciona o botao na janela
        Janela.add(botao);
        // Procedimento padrão ao clicar no X da janela   
        Janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        // Cria a janela (Na verdade não sei ao certo oq é o pack())   
        Janela.pack();   
        // Define o tamanho da janela   
        Janela.setSize(300, 90);   
        // Alinha a janela ao centro da tela   
        Janela.setLocationRelativeTo(null);   
        // Define a janela como visivel   
        Janela.setVisible(true);   
    }   
  
    // Inicio do programa   
    public static void main(String[] argsv)   
    {   
        new MinhaJanela();   
    }   
}

Se não estou enganado o pack() faz com que a janela se ajuste automaticamente para mostrar todos os componentes que você inseriu nela sem precisar usar o setSize() para ajustar.

Para saber mais sobre os componentes você pode usar a API do Java.

Qualquer dúvida posta ai.

Abraço.

wesleysanches

Galera, não consigo fazer uma caixa de confirmação antes de sair. Oq está errado ?? Não aparece nada:

int i = 0; i = JOptionPane.showConfirmDialog(null,"Deseja Sair");

Estou fazendo pelo NetBeans Usando o evento MouseClicked. E já importei o javax.swing.JOptionPane;

CrOnNoS

Até onde você mostrou nada, acho que vai ser preciso o resto do código.

wesleysanches

Descobri pessoal.
O Erro estava somente no evento. Eu usei o MouseClicked e não funcionou, por mais estranho q parece quando selecionei o ActionPerformed. Q nem sei qual a diferença funcionou. Estranho.
Alguém sabe o pq ??

Abraços t+ !!

Thiago_Luis

Fala cara, blza?

Então, quando se trabalha com GUIs, vc vai trabalhar tbm com eventos.
Cada coisa que vc faça numa JFrame, gera um evento.
Ex: Quando vc aperta um botão, gera uma ActionEvent. Quando você pressiona o botão direito do mouse, gera um MouseEvent. Quando você clica no 'x' do JFrame, gera um WindowEvent, ou seja, tudo o que vc faça gera um objeto Event.
Só que para fazer funcionar, vc precisa implementar uma interface correspondente.

Ex: Se você quer clicar no 'x' do JFrame e antes de fechar a tela, informar uma pergunta ao usuário do tipo "Deseja sair?", vc precisa implementar um WindowListener. Isso significa que vc precisa fazer com que sua classe (ou alguma outra classe) implemente WindowListener. Mas não pense nessa interface por hora, pesquise mais sobre ActionListener.

Quando vc implementa essa interface (ActionListener), vc precisa declarar um método dentro da sua classe, chamado actionPerformed(). Isso significa que todas as ações que vc QUIZER que gerem eventos, entrarão neste método. Eu disse QUIZER pois quando vc cria um componete, um JButton por exemplo, ele não faz nada, só fará se vc adicionar este botão a uma "lista de escuta de eventos". Isso será feito pelo método addActionListener() chamado pelo JButton que vc desejar.
import javax.swing.*;   
import java.awt.event.*;
public class MinhaJanela implements ActionListener  
{   
    // Constructor   
    public MinhaJanela()   
    {   
    	
    	// Cria o objeto janela e define o titulo da janela   
        JFrame Janela = new JFrame("Minha janela em JAVA");   
        //Cria o botão
        JButton botao = new JButton("Click");
        //Adiciona o botao na janela
        Janela.add(botao);
        //Aqui vc indica que vc QUER saber quando um usuário clicar NESTE botão
        botao.addActionListener(this);
        // Procedimento padrão ao clicar no X da janela   
        Janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        // Cria a janela (Na verdade não sei ao certo oq é o pack())   
        Janela.pack();           // Alinha a janela ao centro da tela   
        Janela.setLocationRelativeTo(null);   
        // Define a janela como visivel   
        Janela.setVisible(true);   
    }   

   public void actionPerformed(ActionEvent evt){
     JOptionPane.showMessageDialog(null,"Hello Word");
   }
  
    // Inicio do programa   
    public static void main(String[] argsv)   
    {   
        new MinhaJanela();   
    }   
}
Quando vc usa o pack(), não precisa usar o setSize(), pois o pack() trará uma janela de acordo com os componetes que estão inseridos nela, ele vai dimensionando para o mínimo possível. Faça um teste e adicione outro componentes, JLabel, JText entre outros. No método addActionListener() eu passei uma palavra reservada, a this. Esse método precisa saber o seguinte: "Qual é a classe que implementa a interface ActionListener?". O this informa: "Ai método addActionListener(), a classe que implementa esta interface sou eu mesma!!!". Deve ter ficado meio confuso, mas de mais algumas pesquisadas sobre "referência this.

Resumindo, quando vc adiciona um componente ao addActionListener(), quando o usuário clicar em um destes componentes, chamará automaticamente o método actionPerformed(). Aí, dentro desse método fica por sua conta o que fazer.

Qualquer dúvida posta ai ok?

Abraço

wesleysanches

Poxa Thiago, super legal viu.
Me ajudou pra cace… rsrs

Estou para compra aquele livro do Deitel, dizem q é muito bom neh ??
Bem, meus problemas mesmo com JAVA seria apenas o uso das GUI e eventos, propriedades no Geral, mas acho q isso com tempo e prática muda neh ??
Desculpe a pergunta, quanto tempo levou para vc ficar legal em JAVA ??

Flw, vlw a todos.
Abraços !!!

MarcioCasteloBranco

Wesley é muito interessante conhecer a classe Swing como vc esta fazendo contudo, por exemplo o netbeans de fornece ferramentas incríveis na construção de frames e afins, desta forma facilita muito a nossa vida na hora de programar, cria um projeto novo no momento de seu projeto escolha um formulário JFrame e ai a diversão.
Valeu

wesleysanches

Até comecei a fazer isso mesmo, super legal.
O Ruim é que não posso alterar o código gerado pelo NetBeans. Mas é bem legal. Vale apena !!

Thiago_Luis

Então,

Com relação as IDEs que facilitam a vida (e muito) com esses recursos de vc moldar a janela, sem digitar código, na minha opinião pra vc, agora, não é uma boa.
Da AQUELA estudada em Swing (Eu tenho este Deitel 6, é fera, mas tbm é muito muito extenso, é preciso ter paciência), vai na raça, fazendo os códigos na unha.
Assim, vc sem querer já memoriza bastante.

Outra recomendação é o livro Use a Cabeça! Java.
É bem menor e explica muito bem tbm.

Ta ai a dica !!!

Abraço.

Criado 13 de agosto de 2009
Ultima resposta 17 de ago. de 2009
Respostas 17
Participantes 9