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 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). 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. 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 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 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 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 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 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 E agora, o código fonte desse programa (exBlog.java): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 //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); 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 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); 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 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) Controlando eventos e ações Se você parar para reparar, um aplicativo gráfico é como se fosse como um cardápio de um restaurante. Você chega, faz seus pedidos e suas ordens são atendidas. Cada pessoa vai fazer pedidos diferentes, tanto dos pratos como do número de coisas ordenadas. Da mesma maneira é uma aplicação gráfica em Java. Um programa nada mais é que uma série de opções, onde cada usuário vai fazer o que quiser, clicando em botões, apertando teclas do teclado, rolando a barra de informações, marcando, selecionando, escrevendo, minimizando, fechando e uma infinidade de possibilidades. Cada vez que o usuário faz uma destas coisas, dizemos que foi realizado um evento. Ou seja, um click, o mouse passou em alguma região e algo mudou, ele escreveu algo, deu enter etc etc. O que a GUI (Graphic User Interface) faz é nada mais que tratar estes eventos. Se ele apertar isso, acontece aquele, Se digitar isso, aquilo abre. Se clicar aqui, aquilo vai fechar. Se apertar enter, vai pra próxima janela etc etc. Ou seja, um aplicativo gráfico é uma maneira do usuário realizar pedidos e comandos de uma maneira bem mais simples e intuitiva. O usuário realiza o evento, e uma ação ocorre. E é isso que vamos aprender neste tutorial de Java de nossa apostila. Vamos aprender a identificar os eventos e realizar as ações que queiramos que aconteça. Como tratar eventos - A interface ActionListener e o métodoactionPerformed Existe uma classe em Java que será a responsável pelo tratamento de eventos. Ou seja, é nela que vamos identificar o evento que ocorreu e é nela que vamos definir que ações nossos aplicativos devem executar quando tal evento ocorrer. A classe ActionListener é uma interface, ou seja, é classe composta apenas de métodos abstratos. E isso é até óbvio, pois a classe não tem como saber que tipos de eventos vamos tratar em um aplicativo, muito menos vai saber que tipo ação queremos que nosso software tome quando um evento ocorrer. Listener pode ser traduzido como 'ouvinte'. E isso faz sentido, pois essa interface é que vai ficar 'esperando' algo ocorrer. É como se ela ficasse em um loop infinito, o tempo todo testando: "Ocorreu algo agora? E agora? Foi um evento? É um evento? E agora? E agora?..." Ou seja, a interface fica na 'escuta', na espreita até o usuário fazer alguma interação com o aplicativo e um evento ocorrer. A interface ActionListener possui somente um método. Então temos apenas um método obrigatório para implementar, que é o método actionPerformed, e ele é o responsável por tomar alguma ação caso algum evento ocorra. Assim, a interface fica na espera de algum evento, e caso ocorra ele é imediatamente passado para o método actionPerformed. É dentro deste método que iremos definir as ações que ocorrem. Para fazer uso dessas funcionalidades, devemos importar: import java.awt.event.ActionEvent; import java.awt.event.ActionListener;