JButton - Como criar botões em aplicativos Java

No tutorial passado de nossa apostila de Java, ensinamos como criar um JLabel para exibir textos e imagens em uma GUI (aplicação de interface gráfica do usuário) e vimos que nossos programas estão ficando cada vez mais agradáveis graficamente.

Neste tutorial vamos falar sobre um dos elementos mais importantes e usados em aplicativos GUI: os botões! Que são criados através do componente JButton.



JButton - O que são e para que servem os botões

Explicar o que é um botão é uma tarefa praticamente redundante e óbvia, afinal sempre estamos contato com botões nos mais diversos tipos aplicativos gráficos.

Botões nada mais são que uma região gráfica (geralmente um retângulo) que ao ser clicado (ou selecionado pelo teclado) disparam um evento. É como se tivéssemos que dar um enter quando estamos no terminal de comando.

Aliás, tudo é possível de ser feito através do terminal de comando e programação de baixo nível (de fato, é assim que as coisas acontecem). Os componentes gráficos vem para substituir esses comandos e linguagem mais técnica, para que o usuário leigo possa fazer coisas em sua máquina de maneira simples, sem precisar ser 'expert' em computação.

Em breve falaremos em detalhes sobre esses eventos que ocorrem quando apertamos um botão, e as ações que são disparadas quando fazemos isso, pois iremos escolher que ações vão ocorrer quando um botão for clicado, por exemplo.




JButton - Como usar botões em Java

Se parar para pensar, todo botão possui: um texto, ou uma imagem ou os dois.
Afinal, não faz sentido ter um botão que você não sabe o que é ou para que serve.
É exatamente por esse motivo que ensinamos a usar JLabel no tutorial passado de nosso curso de Java, portanto iremos partir do pressuposto que você estudou o artigo e já sabe de todos os paranauês dos labels (vamos usar a parte das imagens, inclusive a figura da xicara.png).

Inicialmente vamos criar uma classe chamada "Botao", que vai estender a JFrame e onde vamos criar nossos JButtons, assim como fizemos com JLabels.
Como o JButton é um componente da JComponent, temos que importar sua classe do pacote swing:

import javax.swing.JButton;

Para usar o botão, apenas instanciamos um objeto da classe JButton.
Vamos criar o botão 'ok':
private JButton ok;

Vamos inicializar esse botão com uma string, que será o texto exibido no botão:
ok = new JButton("OK");

Depois apenas usamos o método add para adicionar o objeto 'ok'.
Nossa classe principal e a Botao ficam:

GUI.java

import javax.swing.JFrame;

public class GUI {
 public static void main(String[] args) {
  Botao botao1 = new Botao();
  
  botao1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  botao1.setSize(350,80);
  botao1.setVisible(true);
 }
}

Botao.java

import javax.swing.JFrame;
import javax.swing.JButton;

public class Botao extends JFrame{
 private JButton ok;
 
 public Botao(){
  super("Criando botões");

  ok = new JButton("OK");
  add(ok);
 }

}

Rodando o código você verá uma coisa peculiar: o botão ocupa a tela inteira.
Mas orgulhe-se, criou seu primeiro botão :)

Layout e organização de uma aplicação GUI

Você já parou para perguntar o que acontece quando usamos o método add, da JFrame ?
É sabido que serve para adicionar componentes gráficas. Mas como? Onde elas são adicionadas?
Se eu adicionar um JLabel, um JButton e um campo de texto, como vai ficar a disposição desses elementos?

Se eu quiser colocar uma componente em um lado, outro na outra, reduzir o tamanho de um botão e uma série de outras coisas?
Pois é, a disposição desses elementos em seu aplicativo gráfico é o que chamamos de layout, é uma espécie de organização dos elementos, para deixá-los bonitos e intuitivos de serem usados.

Existem diversas classes e métodos que servem para nos auxiliar na organização dos componentes que iremos adicionar em um JFrame, existindo até mesmo recursos no NetBeans que permitem que vocês colocam botões, listas, imagens e tudo que possível em um JFrame apenas usando o mouse e definindo a posição de todos os componentes, de uma maneira bem fácil e simples.

Mais à frente iremos nos dedicar aos estudos dos layouts e containers, e por hora vamos usar um manager que vai organizar os elementos de um frame à medida que formos adicionando-os, é o FlowLayout, que vai adicionando os JComponents ao lado do outro, e quando não couberam mais, ele bota na linha debaixo.

Para fazer uso desse layout manager, importe:
import java.awt.FlowLayout;

E no construtor, use o método:
setLayout( new FlowLayout() ); 

Vamos criar outro botão, chamado "cancelar", e fazer uso do FlowLayout:

Botao.java

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.FlowLayout;

public class Botao extends JFrame{
 private JButton ok,
         cancelar;
 
 public Botao(){
  super("Criando botões");
  setLayout( new FlowLayout() );

  ok = new JButton("OK");
  cancelar = new JButton("Cancelar");
  add(ok);
  add(cancelar);
 }

}

Veja como agora os botões possuem tamanho bem mais interessante e estão dispostos um ao lado do outro, como é costume vermos por aí:

Como criar botões em aplicativos Java GUI

Imagens em JButton

Como havíamos dito, há outra maneira de inicializar um JButton, que é colocando objetos da classe Icon, como fizemos com JLabel.
Vamos criar o objeto 'xicara', com a mesma figura que usamos no artigo passado:
Icon xicara = new ImageIcon("xicara.png");

E vamos inicializar o botão 'ok' com uma String e a Imagem:
ok = new JButton("OK", xicara);

E pronto. Se você rodar seu programa, verá que agora existe a pequena imagem de uma xícara ao lado do 'OK' do botão.
Veja o resultado:
Aprenda a inserir uma figura em um botão JButton


Simples, não?

O que um JButton faz - Eventos e Ações

Ok, confesso que a primeira vez que criei um botão meus olhos ficaram cheios de lágrimas.
Depois de muito tempo estudando C e Java só pelo terminal de comando, ver um botão desses criados pelos nossos códigos é bem interessante e animador.

Mas o que fazem esses botões? Experimentou clicar?
Como deve saber, usamos botões para confirmar um comando.
Após apertar um botão, podemos fechar o aplicativo, ir para outra janela do frame, limpar um formulário, enviar os dados de um formulário que acabamos de preencher, damos início a um jogo ao apertar um botão, e infinitas outras coisas são feitas com botões.

Então, o que os nosso botões vão fazer?
Simples: o que você programar eles para fazerem.
Se nossos botões não fizeram nada, é porque simplesmente não os programamos para fazer nada, afinal eles não iriam adivinhar o que queríamos que acontecesse quando apertássemos.

No próximo tutorial de nossa apostila Java Progressivo iremos estudos este tipo de evento: de apertar um botão. Iremos definir através de programação a ação que um programa deve tomar após ter acontecido esse evento (o clique).

Lá, continuaremos a usar os JButtons para ilustrar importantes conceitos na programação de interfaces gráficas para o usuário (GUI), que são os Events, Event Handling, Action Listeners etc.

Ou seja, continuaremos a criar e ensinar mais coisas sobre os JButtons em Java, porém vamos fazer com que eles se comportem como botões de verdade, que disparem algum processo, uma ação, sempre que ocorrer o evento do click.

Nos vemos lá!

4 comentários:

Anônimo disse...

Gostei amigo, Muito bom.
Gostaria de saber se existe algum livro que mostre todos os comandos e suas funções?

Att
A. Marcelo de Melo

Apostila Java Progressivo disse...

Olá Marcelo,

A equipe agradece os elogios.

E não existisse um livro com todos os comandos não, até porque ele teria de ser muito grande.

Mas pra saber o que é possível fazer com Java, acesse a documentação oficial da linguagem:

http://docs.oracle.com/javase/7/docs/api/

Anônimo disse...

E onde está o próximo artigo com o tutorial de eventos nos botões?

paulo disse...

package Botao;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.FlowLayout;

public class Botao extends JFrame{
private JButton ok,
cancelar;

public Botao(){
super("Criando botões");
setLayout( new FlowLayout() );

ok = new JButton("OK");
cancelar = new JButton("Cancelar");
add(ok);
add(cancelar);
fiz tudo , mas continua a dar o aviso.
classe nao encontrada...qual a solução?

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.