Entendendo os principais componentes de um JFrame

Olá pessoal…

Hoje irei falar um pouco de programação Java, mais precisamente, sobre um JFrame, e seus principais componentes, como Labels, Combos, Botões, etc…


Pessoal, irei tratar aqui no blog, sobre os principais (ou alguns dos mais usados) componentes gráficos no mundo Java, e mostrar os principais métodos.

$> JFrame:

Primeiramente pessoal, o que seria um JFrame?… JFrame são tipos de janelas criadas usando a linguagem Java para programar, então vamos mostrar o exemplo que será usado nesta postagem:

Exemplo de JFrame

Exemplo de JFrame

Principais métodos de um JFrame
setLayout() Monta o layout padrão de um JFrame, por exemplo, ‘null’ faz com que os componentes, não se sobreponham e não se conflitem com outros componentes
setDefaultCloseOperation() Método de como será fechado o frame, por exemplo, ‘EXIT_ON_CLOSE’ sai totalmente do sistema e da RAM, já o ‘DISPOSE_ON_CLOSE’ só sai da janela atual
getContentPane().setBackground() Responsável por pintar a cor de fundo de um JFrame, como por exemplo, ‘Color.WHITE’
setLocationRelativeTo() Deixa o JFrame alinhado em algum ponto da tela, por exemplo, ‘null’ deixa alinhado no centro
setIconImage() Altera o ícone da janela (aceita até mesmo imagens png)
setTitle() Muda o título do JFrame
setResizable() Deixa a janela, redimensionável (true) ou não (false)
setSize() Altera o tamanho da janela, sendo passado por parâmetro x e y, no caso tamanho largura e altura respectivamente
setVisible() Deixando a janela visível (true), ou invisível (false)
add() Adiciona um componente no JFrame, como um botão ou um combo
Referência: docs.oracle.com

$> JLabel:

JLabel pessoal, assim como em Delphi ou outras linguagens, apenas é um componente visual (mostrando texto).

Exemplo de JLabel

Exemplo de JLabel

Principais métodos de um JLabel
setForeground() Muda a cor da letra do texto
setBounds() Método que faz o posicionamento do JLabel, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setText() Altera o texto da JLabel
getText() Pega o texto atual do JLabel
Referência: docs.oracle.com

$> JTextField:

JTextField é um componente que pega caracteres digitados pelo usuário, ou seja, frases escritas por usuários.

Exemplo de JTextField

Exemplo de JTextField

Principais métodos de um JTextField
grabFocus() Muda o foco atual para o componente JTextField
setBounds() Método que faz o posicionamento do JTextField, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setText() Altera o texto do JTextField
getText() Pega o texto atual do JTextField
Referência: docs.oracle.com

$> JRadioButton:

Assim como em outras linguagens, no componente JFrame, também tem botões de rádio, os JRadioButton, sendo que, podem ser agrupados com um ButtonGroup, para que haja melhor integridade dos dados (por exemplo, deixar dois radios marcados ao mesmo tempo)…

Exemplo de JRadioButton

Exemplo de JRadioButton

Principais métodos de um JRadioButton
isSelected() Verifica se o componente está selecionado (true ou false)
setSelected() Deixa o componente como selecionado (true ou false)
setBounds() Método que faz o posicionamento do componente, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setForeground() Muda a cor do texto do radio
setBackground() Muda a cor de fundo do radio
Referência: docs.oracle.com

$> JComboBox:

O componente JComboBox é um combo de escolhas, ou seja, uma caixa de seleção com várias opções.

Exemplo de JComboBox

Exemplo de JComboBox

Principais métodos de um JComboBox
getSelectedItem().toString() Pega o item atual selecionado, e converte para String
getSelectedIndex() Pega o index selecionado atual (começa na posição 0)
setBounds() Método que faz o posicionamento do componente, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setForeground() Muda a cor do texto do componente
setBackground() Muda a cor de fundo do componente
Referência: docs.oracle.com

$> JFormattedTextField:

Esse componente é semelhante ao JTextField, porém, ele permite criar uma máscara de digitação, para receber só números, ou outros caracteres especiais.

Exemplo de JFormattedTextField

Exemplo de JFormattedTextField

Principais métodos de um JFormattedTextField
new JFormattedTextField(MASCARA) Para se criar uma máscara, usa-se outro componente o MaskFormatter (leia aqui)
setText() Altera o texto atual do componente
getText() Pega o texto atual do componente
setBounds() Método que faz o posicionamento do JTextField, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setForeground() Muda a cor do texto do componente
Referência: docs.oracle.com

$> JCheckBox:

Componente semelhante ao JRadioButton, porém esse você pode marcar ou desmarcar vários de uma vez.

Exemplo de JCheckBox

Exemplo de JCheckBox

Principais métodos de um JCheckBox
isSelected() Retorna true ou false (verdadeiro ou falso), se o componente está marcado
setBounds() Método que faz o posicionamento do JTextField, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setForeground() Muda a cor do texto do componente
setBackground() Muda a cor de fundo do componente
Referência: docs.oracle.com

$> JButton:

Componente responsável por criar um botão no JFrame, e através do clique nele, ser feita códigos de programação.

Exemplo de JButton

Exemplo de JButton

Principais métodos de um JButton
setMnemonic() Deixa um caracter Minemonico do componente (fica com aquele sublinhado, com isso, segurando alt e apertando esse caracter, ele pressiona o botão automaticamente)
setToolTipText() Mostra um texto quando o cursor do mouse estiver sobre o componente
addActionListener() Adiciona a ação de clicar no botão, porém, deve-se ter uma função actionPerformed, e a classe deve ter uma implementação do ActionListener
setBounds() Método que faz o posicionamento do JTextField, sendo passado por parâmetro, x, y, a e b, nesse caso, coluna, linha, largura e altura respectivamente
setForeground() Muda a cor do texto do componente
setBackground() Muda a cor de fundo do componente
Referência: docs.oracle.com

Lembrando que alguns métodos, como notaram, o setBounds, são universais para qualquer componente, como setEnabled (ativa ou desativa o componente) e o setEditable (ativa ou desativa a edição do componente).

Abaixo pessoal o ícone usado nesse programa (deve ser colocado na mesma pasta do .java, ou alterar no código fonte o caminha da imagem):

Ícone de Java

Ícone de Java

E agora, o código fonte desse programa (exBlog.java):

//bibliotecas
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.text.MaskFormatter;

//classe exBlog extendida de JFrame, implementando ActionListener
public class exBlog extends JFrame implements
 ActionListener{

  //Variáveis
  private JLabel lblEst,lblNome,lblSex,lblNiv,lblCPF,lblInt;
  private JTextField texNome;
  private JFormattedTextField texCPF;
  private ButtonGroup gruSex;
  private JRadioButton radMasc, radFem;
  private JComboBox cmbNiv;
  private JCheckBox chkIng, chkMat, chkPro, chkLog;
  private JButton btnGrav;

  //Iniciando o exBlog
  public exBlog(){
    setLayout(null);

    //Label Estudante
    lblEst = new JLabel("Estudante: ");
    lblEst.setForeground(Color.BLUE);
    lblEst.setBounds(120,5,100,20);
    add(lblEst);

    //Label Nome
    lblNome = new JLabel("Nome: ");
    lblNome.setBounds(10,35,100,20);
    add(lblNome);

    //Text Nome
    texNome = new JTextField("");
    texNome.setBounds(10,65,300,20);
    add(texNome);

    //Label Sexo
    lblSex = new JLabel("Sexo: ");
    lblSex.setBounds(10,95,100,20);
    add(lblSex);

    //Radio Masculino
    radMasc = new JRadioButton("Masculino");
    radMasc.setBounds(10,125,120,20);
    radMasc.setForeground(Color.BLUE);
    radMasc.setBackground(Color.WHITE);
    radMasc.setSelected(true);

    //Radio Feminino
    radFem = new JRadioButton("Feminino");
    radFem.setBounds(200,125,120,20);
    radFem.setForeground(Color.BLUE);
    radFem.setBackground(Color.WHITE);

    //Grupo de Botões
    gruSex = new ButtonGroup();
    gruSex.add(radMasc);
    gruSex.add(radFem);
    add(radMasc);
    add(radFem);

    //Label Nível
    lblNiv = new JLabel("Nível Estudantil: ");
    lblNiv.setBounds(10,155,200,20);
    add(lblNiv);

    //Combo Nível
    cmbNiv = new JComboBox();
    cmbNiv.setBackground(Color.WHITE);
    cmbNiv.addItem("Básico Completo");
    cmbNiv.addItem("Médio Completo");
    cmbNiv.addItem("Superior Completo");
    cmbNiv.addItem("Doutorado e/ou Mestrado Completo");
    cmbNiv.setBounds(10,185,300,20);
    add(cmbNiv);

    //Label CPF
    lblCPF = new JLabel("CPF: ");
    lblCPF.setBounds(10,215,100,20);
    add(lblCPF);

    //Campo com máscara - CPF
    try {
      MaskFormatter mk= new MaskFormatter("###.###.###-##");
      mk.setPlaceholderCharacter('_');
      /*  ou, pode setar os caracteres que irá receber
        MaskFormatter mk= new MaskFormatter("***.***.***-**");
        mk.setPlaceholderCharacter('_');
        mk.setValidCharacters("ABC0123456.");
      */
      texCPF = new JFormattedTextField(mk);
      texCPF.setBounds(10,245,300,20);
      add(texCPF);
    }
    catch(Exception e){}

    //Label Interesses
    lblInt = new JLabel("Interesses: ");
    lblInt.setBounds(10,275,100,20);
    add(lblInt);

    //Check Inglês
    chkIng = new JCheckBox("Inglês");
    chkIng.setBounds(10,305,120,20);
    chkIng.setForeground(Color.BLUE);
    chkIng.setBackground(Color.WHITE);
    add(chkIng);

    //Check Matemática
    chkMat = new JCheckBox("Matemática");
    chkMat.setBounds(170,305,120,20);
    chkMat.setForeground(Color.BLUE);
    chkMat.setBackground(Color.WHITE);
    add(chkMat);

    //Check Programação
    chkPro = new JCheckBox("Programação");
    chkPro.setBounds(10,335,120,20);
    chkPro.setForeground(Color.BLUE);
    chkPro.setBackground(Color.WHITE);
    add(chkPro);

    //Check Lógica
    chkLog = new JCheckBox("Lógica");
    chkLog.setBounds(170,335,120,20);
    chkLog.setForeground(Color.BLUE);
    chkLog.setBackground(Color.WHITE);
    add(chkLog);

    //Botão Ok
    btnGrav = new JButton("Ok");
    btnGrav.setBounds(110,385,120,40);
    btnGrav.setMnemonic('O');
    btnGrav.setToolTipText("Ok...");
    btnGrav.setForeground(Color.RED);
    btnGrav.addActionListener(this);
    add(btnGrav);
  }

  //Função responsável pelos cliques
  public void actionPerformed(ActionEvent acesso){
    String  sSexo="";
    String  sNivel="";
    String  sExec="";
    Boolean bChave=true;
    //se o acesso for via botão gravar-ok
    if(acesso.getSource() == btnGrav){
      //pegando o nivel de escolaridade
      sNivel=cmbNiv.getSelectedItem().toString();
      //verificando os radios
      if(radFem.isSelected())
        sSexo="F";
      if(radMasc.isSelected())
        sSexo="M";

      //montando a frase que será mostrada
      sExec="Nome = '"+texNome.getText()+"'\n"+
            "Sexo = '"+sSexo+"'\n"+
            "Nivel= '"+sNivel+"'\n"+
            "CPF  = '"+texCPF.getText()+"'\n"+
            "-----------------------------\n"+
            "Interesses:\n"+
            "Inglês? "+chkIng.isSelected()+"\n"+
            "Matemática? "+chkMat.isSelected()+"\n"+
            "Programação? "+chkPro.isSelected()+"\n"+
            "Lógica? "+chkLog.isSelected();

      //mostrando a frase
      JOptionPane.showMessageDialog(null,sExec,"Atenção",1);

      //se a chave for verdadeira, chama função limpaDados
      if(bChave){
        limpaDados();
      }
      //Muda o foco do componente
      texNome.grabFocus();

    }
  }

  //Função principal que irá criar a janela
  public static void main(String arg[])
  {
    exBlog ex = new exBlog();
    ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ex.getContentPane().setBackground(Color.WHITE);
    //ícone na mesma pasta do código fonte
    ex.setIconImage(new ImageIcon("ico.png").getImage());
    ex.setTitle("Estudantes...");
    //tira o maximizar e alteração do tamanho
    ex.setResizable(false);
    ex.setSize(350,480);
    ex.setVisible(true);
    ex.setLocationRelativeTo(null);
  }

  //função que limpa o programa e deixa ele como executado da primeira vez
  private void limpaDados(){
    texNome.setText("");
    texCPF.setText("");
    radMasc.setSelected(true);
    chkIng.setSelected(false);
    chkMat.setSelected(false);
    chkPro.setSelected(false);
    cmbNiv.setSelectedIndex(0);
  }

}

E agora, uma imagem da saída do programa:

Exemplo - Saída do Programa (Mensagem)

Exemplo – Saída do Programa (Mensagem)

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

16 Responses

  1. Rodrigo Lima disse:

    Me ajudou muito!
    Valeu xD

  2. wess disse:

    Muito bem explicado, parabéns…eu estava com uma pequena dúvida e já não me lembrava.forte abraço, fica com Deus.

  3. Noemi Santos disse:

    Muito Boom.. Tirou minhas dúvidas, todas em um só código.
    Parabéns pela explicação 😀

  4. Bruno de Souza disse:

    Parabéns pelo excelente trabalho. Estou fazendo um curso técnico voltado a programação e no momento estou tendo aulas de Prog Orientada a Objeto usando java, esse tutorial vai me ajudar muito vou imprimir e repassar aos meus colegas. Abraços

  5. Queria aprender a criar botões ou menus para salvar,excluir,editar,imprimir e outras funções.Vejo bastante tutorial no youtube mas quero dominar o java,tenho o netbeans 8.0.2!!!!

    • Dan_Atilio disse:

      Boa noite Sandré.
      Que bacana, e os estudos como estão?
      O importante é não desistir, tente fazer a integração com um banco de dados, como o MySQL, daí por trás é só fazer os comandos de insert, update, delete.
      Um grande abraço.

  6. Crystian disse:

    Esse é o único material de JFrame por aqui? Se tiver mais como conseguir? Porque eu não encontro pela pesquisa.

  7. Adelson Saguate disse:

    Muito obrigado! Ajudou-me bastante, força que continue ajudando quem puder…

Deixe uma resposta

Terminal de Informação