78
Java - Introdução ao Swing (Interface) Prof: Sérgio Souza Costa

Java - Introdução ao Swing (Interface)

Embed Size (px)

Citation preview

Page 1: Java - Introdução ao Swing (Interface)

Java - Introdução ao Swing (Interface)Prof: Sérgio Souza Costa

Page 2: Java - Introdução ao Swing (Interface)

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: Java - Introdução ao Swing (Interface)

Continuando sua aventura no mundo Java

Page 4: Java - Introdução ao Swing (Interface)

O programador C decide experimentar sua primeira aplicação GUI (Graphical User Interface), ou seja, Interface gráfica do Usuário.

Page 5: Java - Introdução ao Swing (Interface)

Estou habituado com estas interfaces, uso todo dia.

Page 6: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como:

Page 7: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas

Page 8: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas, botões

Page 9: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas, botões, caixa de combinação

Page 10: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção

Page 11: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção, caixa de texto

Page 12: Java - Introdução ao Swing (Interface)

Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção, caixa de texto, caixa de listagem

Page 13: Java - Introdução ao Swing (Interface)

Além deste controles, temos menus

Page 14: Java - Introdução ao Swing (Interface)

Além deste controles, temos menus e menus de contexto.

Page 15: Java - Introdução ao Swing (Interface)

Português Inglês

Janela Window (pode ser referenciado como form or frame)

Botões Button

Caixa de combinação Combo box

Botão de opção Option button

Caixa de texto Text box, text field or text enty box

Caixa de listagem List box

Menu Menu

Menu de contexto Context menu

Os principais controles em português e inglês

Page 16: Java - Introdução ao Swing (Interface)

Como o Java possui um grande framework, ele deve ter um conjunto de objetos para cada um destes elementos gráficos

Page 17: Java - Introdução ao Swing (Interface)

Isso mesmo, o Java possui o AWT (Abstract Window Toolkit) e o Swing. O Swing é mais recente e prove

controles nativos em Java, diferentemente do AWT.

Page 18: Java - Introdução ao Swing (Interface)

Mas o importante agora é conhecer os componentes

Swing.

Page 19: Java - Introdução ao Swing (Interface)

Qual é o componente mais importante entre citados ?

Page 20: Java - Introdução ao Swing (Interface)

A Janela, cada aplicativo tem a sua própria, e é nela que temos botoes como fechar, maximizar e minimizar.

Page 21: Java - Introdução ao Swing (Interface)

Isso, em Swing, uma Janela é suportada pelo componente Jframe (todos componentes

swing começa com “J”)

Page 22: Java - Introdução ao Swing (Interface)

Entendi, basta instancia um objeto do tipo Jframe. Certo ?

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();}}

Page 23: Java - Introdução ao Swing (Interface)

Nada apareceu

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();}}

Page 24: Java - Introdução ao Swing (Interface)

Ah … a janela não é mostrada até que eu mande mostrar, ou

seja, setVisible (true)

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();frame.setVisible(true);

}}

Page 25: Java - Introdução ao Swing (Interface)

O Tamanho da Janela é o mínimo possível para mostrar

os botoes de fechar e maximizar.

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();frame.setVisible(true);

}}

Page 26: Java - Introdução ao Swing (Interface)

Mas eu posso definir o tamanho (em pixels) que eu

queira.

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();frame.setVisible(true);frame.setSize (200,200);

}}

Page 27: Java - Introdução ao Swing (Interface)

Porém minha aplicação nao fecha, quando clico no botão

de fechar ☹

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();frame.setVisible(true);frame.setSize (200,200);

}}

Page 28: Java - Introdução ao Swing (Interface)

Para o Java, o comportamento padrão para

este botão é minimizar. Se quiser que ele feche é preciso

“dizer” isso explicitamente.

Page 29: Java - Introdução ao Swing (Interface)

Agora sim, minha Janela que não faz nada já está

funcionando ☺

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);frame.setSize (200,200);frame.setVisible(true);

}}

Page 30: Java - Introdução ao Swing (Interface)

Agora, vou adicionar algum componente a minha Janela, por exemplo, um botão.

Page 31: Java - Introdução ao Swing (Interface)

public class SwingOla {public static void main(String[] args) {

JFrame frame = new JFrame ();JButton bt = new JButton ("Diga Ola");frame.add(bt);

frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

frame.setSize (200,200);frame.setVisible(true);

}}

Page 32: Java - Introdução ao Swing (Interface)

Este botão é realmente grande, além disso, como faço para adicionar alguma ação a ele ?

Page 33: Java - Introdução ao Swing (Interface)

O Java, precisa saber como ele vai organizar todos os

componente que você adiciona.

Page 34: Java - Introdução ao Swing (Interface)

Ele possui politicas de layout, o padrão é o “border layout”,

centralizado.

Page 35: Java - Introdução ao Swing (Interface)

Ele divide a Janela, como abaixo. Quando adiciona um

novo objeto, ele vai ser adicionado ao centro.

Page 36: Java - Introdução ao Swing (Interface)

Estas linhas são então equivalentes.

frame.add(bt, BorderLayout.CENTER);

frame.add(bt);

Page 37: Java - Introdução ao Swing (Interface)

frame.add(bt, BorderLayout.NORTH); frame.add(bt, BorderLayout.SOUTH);

frame.add(bt, BorderLayout.EAST); frame.add(bt, BorderLayout.WEST);

Page 38: Java - Introdução ao Swing (Interface)

Um outro layout ,mais simples, é o flowlayout, neste os objetos

vão ocupando o espaço da esquerda para direita. Caso necessário, ocupam a linha

seguinte

Page 39: Java - Introdução ao Swing (Interface)

JFrame frame = new JFrame ();frame.setLayout(new FlowLayout());frame.setSize (200,200);JButton bt = new JButton ("Diga Ola");frame.add(bt);frame.add(new JButton ("Diga Adeus"));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);

Entendi, é como digitar texto no Word. Os componentes “fluem” de acordo com o tamanho da janela.

Page 40: Java - Introdução ao Swing (Interface)

aContainer.setLayout(new GridLayout(2, 3));

O GridLayout divide o container em celulas invisiveis, que serão preenchidas com os componentes.

Page 41: Java - Introdução ao Swing (Interface)

Com este layout, os componente preenchem o container da esquerda para direita.

JFrame frame = new JFrame ();frame.setLayout(new GridLayout(2, 3));frame.setSize (200,200);for (int i =1; i < 7; i ++) {

frame.add(new JButton ("Botão:"+i));}frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);

Page 42: Java - Introdução ao Swing (Interface)

Usando o componente Jpanel (nao visível), podemos gerar layouts mais complexos, agrupando controles.

JFrame frame = new JFrame ();JPanel panNome = new JPanel ();panNome.setLayout(new FlowLayout());panNome.add(new JLabel ("Nome:"));JTextField txtNome = new JTextField (15);panNome.add (txtNome);JPanel panEmail = new JPanel ();panEmail.add(new JLabel ("Email:"));JTextField txtEmail = new JTextField (15);panEmail.add (txtEmail);frame.setLayout(new FlowLayout());frame.setSize (250,150);frame.add(panNome);frame.add(panEmail);

Page 43: Java - Introdução ao Swing (Interface)

Ok. Estou começando entender os layout, mas agora quero colocar “ações” aquele meu aplicativo.

Page 44: Java - Introdução ao Swing (Interface)

O Java suporta o coneito de eventos, onde os objetos são divididos fontes (sources) e receptores (listenners).

Page 45: Java - Introdução ao Swing (Interface)

Um evento é produzido por ações do usuário, ou seja, resultado da interação do usuário com a interface, como movimento ou click de mouse, pressionar de uma tecla …

Page 46: Java - Introdução ao Swing (Interface)

Existem diversos eventos, onde cada componente pode disparar determinados eventos. Veremos melhor sobre eles numa aula futura.

Page 47: Java - Introdução ao Swing (Interface)

No teu caso, você precisa capturar o evento “action” do botão. Para isso precisamos de um objeto receptor para este tipo de evento.

Page 48: Java - Introdução ao Swing (Interface)

Existe uma “interface java” para este receptor, identificada como ActionListener que possui a assinatura do método actionPerformed

Page 49: Java - Introdução ao Swing (Interface)

Este receptor captura o evento e finaliza a aplicação.

public class Finaliza implements ActionListener {

@Overridepublic void actionPerformed(

ActionEvent arg0) {System.exit(1);

}}

Page 50: Java - Introdução ao Swing (Interface)

JFrame frame = new JFrame ();JButton bt = new JButton ("Diga Ola");frame.setLayout(new FlowLayout());frame.setSize (250,60);frame.add(bt);JButton btFechar = new JButton ("Diga Adeus");btFechar.addActionListener(new Finaliza());frame.add(btFechar);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);

Então, basta adicionar o receptor ao objeto que irá disparar o evento, neste caso o botão fechar.

Page 51: Java - Introdução ao Swing (Interface)

btFechar.addActionListener(new ActionListener () {public void actionPerformed (ActionEvent ev){

System.exit(1);}

});

Ao invés de declarar uma nova classe, podemos passar um “objeto anonimo” diretamente ao método addActionListener

Page 52: Java - Introdução ao Swing (Interface)

ATIVIDADE: Faça o botão “Diga Ola” mostrar a seguinte mensagem “Ola”:

JOptionPane.showMessageDialog(null, "Ola !!");

Page 53: Java - Introdução ao Swing (Interface)

Entendido os conceitos basico, vou apresentar agora uma versão melhora para o mesmo aplicativo.

Page 54: Java - Introdução ao Swing (Interface)

Usualmente, delegamos a um objeto do tipo Frame toda a tarefa de montar sua interface.

Page 55: Java - Introdução ao Swing (Interface)

public class PrimeiroSwing extends JFrame {public PrimeiroSwing () {

super();setTitle("Primeiro Swing");JButton bt = new JButton ("Diga Ola");bt.addActionListener(new ActionListener () {

public void actionPerformed (ActionEvent ev){JOptionPane.showMessageDialog(null, "Ola !!");

}});setLayout(new FlowLayout());setSize (250,60);add(bt);JButton btFechar = new JButton ("Diga Adeus");btFechar.addActionListener(new ActionListener () {

public void actionPerformed (ActionEvent ev){System.exit(1);

}});add(btFechar);setDefaultCloseOperation(EXIT_ON_CLOSE);

}}

Classe é responsável por montar

toda a interface

Page 56: Java - Introdução ao Swing (Interface)

public class SwingOla {public static void main(String[] args) {

// TODO Auto-generated method stubPrimeiroSwing j = new PrimeiroSwing();j.setVisible(true);

}}

Classe teste

Page 57: Java - Introdução ao Swing (Interface)

Esta aula foi apenas uma apresentação ampla sobre como o Swing funciona.

Page 58: Java - Introdução ao Swing (Interface)

Entendido como ele funciona, temos que ler e consultar referencias sobre os controles e eventos.

Page 59: Java - Introdução ao Swing (Interface)

Atividade: Construa a mesma aplicação, só que usando os recursos do Netbeans. Iremos usá-lo para construir nossas

interfaces daqui para frente.

Page 60: Java - Introdução ao Swing (Interface)

Desenvolva sua própria calculadora de IMC

Page 61: Java - Introdução ao Swing (Interface)

Atividade: Desenvolva sua própria calculadora de IMC (indice de massa

corpórea)

Para fazer o cálculo do IMC basta dividir seu peso em quilogramas pela altura ao quadrado (em metros). O número que será gerado deve ser comparado aos valores da tabela IMC para se saber se você está abaixo, em seu peso ideal ou acima do peso.

Por exemplo, se você pesa 60Kg e mede 1,67m, você deve utilizar a seguinte fórmula para calcular o IMC:

IMC = 60 ÷ 1,67²IMC = 60 ÷ 2,78IMC = 21,5

Page 62: Java - Introdução ao Swing (Interface)

Atividade: A interface pode ser baseada no seguinte aplicativo:

Page 63: Java - Introdução ao Swing (Interface)

Interface Swing com banco de dados

Page 64: Java - Introdução ao Swing (Interface)

Cadastro de contatos

• Montem a seguinte interface.

• Alterem o nome das variáveis referentes as caixas de textos e botões.

• Usem nomes sugestivos e sigam um “padrão”. Exemplo, btnCadastrar, btnLimpar, txtNome, txtEmail

Page 65: Java - Introdução ao Swing (Interface)

Codifiquem a ação “Sair”, similar ao que fizemos na aula 8

Page 66: Java - Introdução ao Swing (Interface)

Evitando fechamento acidental. Peça uma confirmação do usuário.

Page 67: Java - Introdução ao Swing (Interface)

O Java oferece uma classe que cria este tipo de “caixas”, de mensagem, confirmação e entrada de

usuário.

private void btnSairActionPerformed(java.awt.event.ActionEvent evt)

{int confirm = JOptionPane.showConfirmDialog (this,

"Deseja Realmente fechar a aplicação?", "Sair - Confirmação",

JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirm == JOptionPane.YES_OPTION) { System.exit(1); }}

Page 68: Java - Introdução ao Swing (Interface)

JOptionPane.showMessageDialog (null,"Montando uma caixa de Dialogo sem ícone","Mensagem",JOptionPane.PLAIN_MESSAGE );

int opcao = JOptionPane.showConfirmDialog (null,"Deseja terminar ?","Mensagem Final",JOptionPane.YES_NO_OPTION ,JOptionPane.QUESTION_MESSAGE )

String numero=JOptionPane.showInputDialog (null,"Digite uma informação qualquer”,"Entrada de dados",JOptionPane.QUESTION_MESSAGE );

Page 69: Java - Introdução ao Swing (Interface)

Defina o “mnemonic” para cada botão. Facilita o uso direto pelo

teclado.

Page 70: Java - Introdução ao Swing (Interface)

Codifique a ação limpar, como fizemos em aula passada.

Page 71: Java - Introdução ao Swing (Interface)

Codifique a ação cadastrar. No fim da ação, mostre uma mensagem para o usuário que foi salva com

sucesso.

Page 72: Java - Introdução ao Swing (Interface)

Vamos usar o banco de dados “contato”, o mesmo utilizado na aula sobre banco de dados (aula

04).

Page 73: Java - Introdução ao Swing (Interface)

Além disso, usaremos a mesma estrutura. As classes Contato e

ContatoDao.

Page 74: Java - Introdução ao Swing (Interface)

Contudo, faremos uma classe para abrir a conexão. A

ConnectionFactory

public class ConnectionFactory { public Connection getConnection() { try { return DriverManager.getConnection(

"jdbc:mysql://localhost/Contato_bd", "root", "root");

} catch (SQLException e) { throw new RuntimeException(e); } } }

Page 75: Java - Introdução ao Swing (Interface)

A ConnectionFactory será usada no construtor da ContatoDAO.

public ContatoDAO() {connection = new

ConnectionFactory().getConnection();}

Page 76: Java - Introdução ao Swing (Interface)

Depois de testado o aplicativo, substitua o textfield do telefone

por um formattedtextfield.

Page 77: Java - Introdução ao Swing (Interface)

Inclua os imports ao codigo fonte e codigo para configurar a

mascara em personalizar codigo.

MaskFormatter mascara; try { mascara = new MaskFormatter(

"(##)####-####"); mascara.setPlaceholderCharacter('_'); fmttxtFone.setFormatterFactory (

new DefaultFormatterFactory(mascara)); } catch (ParseException ex) {}

import javax.swing.text.DefaultFormatterFactory;import javax.swing.text.MaskFormatter;

Page 78: Java - Introdução ao Swing (Interface)

Na próxima aula veremos como carregar dados do banco de dados e o componente JTable