Java: Introducao ao Swing

48
Interfaces Gráficas em Java com Swing Arthur Emanuel de Oliveira Carosia

Transcript of Java: Introducao ao Swing

Page 1: Java: Introducao ao Swing

Interfaces Gráficas em Java com Swing

Arthur Emanuel de Oliveira Carosia

Page 2: Java: Introducao ao Swing

Swing

• Biblioteca com muitas possibilidades de elementos para interface gráfica em Java

• A partir do Java 1.2• Uso simples• Portabilidade

– O look-and-feel do Swing é único em todas as plataformas onde roda, seja ela Windows, Linux, ou qualquer outra.

Page 3: Java: Introducao ao Swing

Portabilidade

• Desenvolvida tendo em mente o máximo de portabilidade possível.

• Por exemplo, – o posicionamento relativo de componentes, em

detrimento do uso de posicionamento fixo

Page 4: Java: Introducao ao Swing

Look And Fell

• Aparência da aplicação– Cores– Formatos– Etc

• Por padrão, o Java vem com um look-and-feel próprio, que se comporta exatamente da mesma forma em todas as plataformas suportadas.

Page 5: Java: Introducao ao Swing

Look And Feel

• Por isso é possível alterar qual o look-and-feel a ser usado em nossa aplicação.– Windows– Mac OS– Look and Feel baixados da internet.

Page 6: Java: Introducao ao Swing

Pacote

• A biblioteca do Swing está no pacote javax.swing:– Import javax.swing;

Page 7: Java: Introducao ao Swing

JOptionPane

• A classe mais simples do Swing é a JOptionPane que mostra janelas de mensagens, confirmação e erros, entre outras.

• A classe JOptionPane nos proporciona uma série de métodos estáticos que ao serem invocados criam caixas de diálogos simples e objetivas.

Page 8: Java: Introducao ao Swing

JOptionPane

• A classe mais simples do Swing é a JOptionPane que mostra janelas de mensagens, confirmação e erros, entre outras.

JOptionPane.showMessageDialog(null, "Minha mensagem!");

Page 9: Java: Introducao ao Swing

JOptionPane

• A classe mais simples do Swing é a JOptionPane que mostra janelas de mensagens, confirmação e erros, entre outras.

JOptionPane.showMessageDialog(null, "Minha mensagem!");

Frame no qual a caixa de diálogo é exibida. Se o valor for null, então é utilizado um Frame padrão.

Page 10: Java: Introducao ao Swing

JOptionPane

• A classe mais simples do Swing é a JOptionPane que mostra janelas de mensagens, confirmação e erros, entre outras.

JOptionPane.showMessageDialog(null, "Minha mensagem!");

Mensagem a Ser Exibida

Page 11: Java: Introducao ao Swing

JOptionPane

• A classe mais simples do Swing é a JOptionPane que mostra janelas de mensagens, confirmação e erros, entre outras.

JOptionPane.showMessageDialog(null, "Minha mensagem!");

Page 12: Java: Introducao ao Swing

JOptionPane

• Outros métodos

Page 13: Java: Introducao ao Swing

JOptionPane

Page 14: Java: Introducao ao Swing

Exercício

• Adapte o problema da biblioteca para que seja feita leitura dos dados do teclado utilizando a classe JOptionPane.

• Utilize também um JOptionPane para exibir mensagem de erro caso o nome digitado para alguma String do programa seja vazio ou nulo.

Page 15: Java: Introducao ao Swing

JFrame

• Moldura ou janela do programa

• Exibe elementos de interface do usuário

• Interações:– Maximizar, minimizar, fechar– Invocar outros Jframes ou janelas

Page 16: Java: Introducao ao Swing

JFrame

Page 17: Java: Introducao ao Swing

JPanel

• Conteúdo (Painel) que será exibido no Jframe• Possui componentes (JComponents) que serão

exibidos no Jframe• Exemplos de Componentes:

– Botões, imagens, texto, etc • Sobre um Jframe, podem serencaixados vários JPanels

Page 18: Java: Introducao ao Swing

JPanel

Page 19: Java: Introducao ao Swing

JLabel

• Rótulos que podem conter imagens ou textos que podem ser exibidos em frames

• Os JLabels são classes derivadas da JComponent e fazem parte do pacote swing.

• Uso:– JLabel meuRotulo = new JLabel(“Meu Texto”);

Page 20: Java: Introducao ao Swing

JTextField

• Caixas de Texto• Métodos importantes:

– getText(String)– String:setText()– setEditable(Boolean)

• Uso:– JTextField texto = new JTextField(“Conteudo”);

• Para senhas, existe a classe JPasswordField, que possui comportamento semelhante ao JTextField.

Page 21: Java: Introducao ao Swing

JButton

• Botões que ao serem clicados disparam um evento. • Este evento pode ser tratado pelo programador

para que o programa siga seu fluxo adequado.

• Uso:– JButton botao = new JButton("Clique em mim!");

• Tratamentos de Eventos serão apresentados mais adiante nesta mesma aula.

Page 22: Java: Introducao ao Swing

Exercício• Crie uma interface simples com rótulos, campos de texto e

botões para login do usuário, contendo os seguintes elementos:– Nome de usuário– Senha– Botão de limpar– Botão de login

• Crie um ArrayList com 5 usuários que podem ter acesso à sua aplicação.

• Implemente a funcionalidade que, ao clicar no botão de login, verifica se os dados digitados pertencem a esse ArrayList.

Page 23: Java: Introducao ao Swing

Integração de Interface com Código-Fonte

• É uma boa prática separar o código da aplicação do código da interface.

• Evitar a mistura de código da lógica da aplicação com código de interface do usuário.

• Criação de pacotes separando o que é interface do que é lógica da aplicação.

Page 24: Java: Introducao ao Swing

Exercício

• Incremente a aplicação em Java que cadastra livros e artigos em uma biblioteca.

• Crie uma interface adequada para esta funcionalidade utilizando JFrame, JPanel, JButton, JTextField e JLabel.

Page 25: Java: Introducao ao Swing

Eventos

• 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.

Page 26: Java: Introducao ao Swing

Eventos

• O que a GUI (Graphic User Interface) faz é nada mais que tratar eventos, que são normalmente disparados pelo usuário.

Page 27: Java: Introducao ao Swing

Eventos

• A classe ActionListener é uma interface, ou seja, é classe composta apenas de métodos abstratos.– Classe responsável pelo tratamento de eventos.– A classe não sabe que tipos de eventos vamos tratar

em um aplicativo– Necessita ser implementada pelo aplicativo que for

tratar eventos– essa classe é que vai fica 'esperando' algo ocorrer no

programa (um evento) para ser tratado

Page 28: Java: Introducao ao Swing

Eventos

• A interface ActionListener possui somente um método: – actionPerformed, é o responsável por tomar

alguma ação caso algum evento ocorra.• A interface fica na espera de algum evento, e

caso ocorra ele é imediatamente passado para o método actionPerformed

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

Page 29: Java: Introducao ao Swing

Eventos

• Event Handling– Tratador de eventos

• Implementar a classe ActionListener

O método actionPerformed recebe um argumento 'evento' do tipo ActionEvent.Este argumento 'evento' vai armazenar a natureza do evento, ele sabe especifica e exatamente que componente ocorreu o evento.Tal componente está armazenado no método getSource() deste objeto.

Page 30: Java: Introducao ao Swing

Eventos

• Existem diferentes formas de tratar eventos.• Seja com uma classe exclusiva para isso, ou classes

internas ou objetos anônimos.• O NetBeans possui uma interface agradável e

simples para tratar eventos, que será apresentado mais à frente.

• Referências– http://www.javaprogressivo.net/2013/11/Tratamento-d

e-eventos-extends-implements-classe-interna-objeto-anonimo-mudar-background-jframe.html

– http://www.javaprogressivo.net/2013/11/Tratamento-de-eventos-extends-implements-classe-interna-objeto-anonimo-mudar-background-jframe.html

Page 31: Java: Introducao ao Swing

JCheckBox• Fornece diversas opções para escolha

A lógica dela, em Java, é que se ela estiver marcada, é como se retornasse o valor lógico true, e se não estiver marcada,

retorna false.

Precisamos tratar os eventos e ações, e isso é possível em JCheckBox através da classe ItemListener e seu método

itemStateChanged.

Page 32: Java: Introducao ao Swing

JCheckBox

• Fornece diversas opções para escolha

JCheckBox java = new JCheckBox("Java"); JCheckBox php = new JCheckBox("PHP"); JCheckBox csharp = new JCheckBox("C#"); JCheckBox c = new JCheckBox("C");

Método que verifica se um botão foi selecionado:

boolean:isSelected()

Page 33: Java: Introducao ao Swing

JRadioButton• Fornece uma opção de escolha única entre diversas opções.

• Precisa de um gerenciador de eventos, handler.– Deve, obrigatoriamente, implementar a interface ItemListener.– Nessa interface, devemos implementar, obrigatoriamente, o

método itemStateChanged.Método que vai verifica se algo foi clicado, marcado ou desmarcado.

Page 34: Java: Introducao ao Swing

JRadioButton

JRadioButton java = new JRadioButton("Java", false);JRadioButton csharp = new JRadioButton("C#", false);

Método que verifica se um botão foi selecionado: boolean:isSelected()

Page 35: Java: Introducao ao Swing

ButtonGroup

• Controla se uma interface necessita de vários grupos de botões diferentes.

• Declarar objetos que são os grupos e adicionar a esses grupos os RadioButtons que são relacionados a cada um.

ButtonGroup grupo1 = new ButtonGroup(); grupo1.add(java);

grupo1.add(csharp);

Page 36: Java: Introducao ao Swing

Exercícios

• Faça com que apareçam as interfaces na seqûencia: interface de login, depois interface de cadastrar livros.

• O usuário que for cadastrado no sistema irá ter acesso ao cadastro dos livros quando clicar no botão de Login e gerar um evento de clique do mouse.

• Incremente a inferface de cadastro de livros para ter um componente que discrimine se o cadastro é de livros ou artigos.

Page 37: Java: Introducao ao Swing

Exercícios

• Faça um programa que receba os coeficientes de uma equação do segundo grau e retorne suas raízes, mesmo as complexas, através de caixas de diálogo (com JOptionPane).

• Considere que uma equação do segundo grau é uma classe com os atributos a, b e c e possui métodos que determinam suas raízes.

Page 38: Java: Introducao ao Swing

Exercícios

• Faça outra versão para o mesmo programa utilizando Jframe, caixas de texto para a inserção dos componentes a,b e c e um botão que calcula o resultado da equação.

• Faça com que os resultados da equação preencham um campo de texto após o clique no botão.

• Esse campo de texto não pode ser modificado pelo usuário, somente pela aplicação.

Page 39: Java: Introducao ao Swing

Utilizando o NetBeans

• O NetBeans possui um ambiente dedicado ao design de interfaces de usuário.

• A manipulação dos componentes de interface é realizada visualmente.

• Toda manipulação visual tem um efeito no código-fonte, que é gerado automaticamente pela IDE.

Page 40: Java: Introducao ao Swing

Utilizando o NetBeans

Criando um novo JFrame

Page 41: Java: Introducao ao Swing

Utilizando o Netbeans

Janela do Design da Interface do Usuário

Page 42: Java: Introducao ao Swing

Utilizando o Netbeans

Aba de Design

Page 43: Java: Introducao ao Swing

Utilizando o NetbeansJanela que contém os

componentes que podem ser inseridos na interface

Page 44: Java: Introducao ao Swing

Utilizando o Netbeans

Janela que contém:• Propriedades dos componentes• Eventos dos componentes• Elementos associados ao código-fonte

Page 45: Java: Introducao ao Swing

Utilizando o Netbeans

Page 46: Java: Introducao ao Swing

Código-fonte resultado da geração automática pelo Netbeans

Page 47: Java: Introducao ao Swing

Exercício• Crie um jogo de adivinhar palavras.• Cada palavra possui a sua quantidade de caracteres e várias

dicas, que serão exibidas para o usuário. • Ao acertar uma palavra, o usuário ganha 5 pontos e a

próxima palavra é exibida.• O usuário pode ter 3 chances de errar uma palavra até dar

fim de jogo e exibir a sua pontuação acumulada.• O jogo deve possuir uma interface gráfica composta de:

– Caixa de texto para digitar a palavra– Botão para confirmar a palavra digitada– Textos para exibir as dicas das palavras