java swing

46
Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590 Noções de Design Gráfico Unidade IV – Estudo aplicado em ambientes heterogêneos

Upload: necio-de-lima-veras

Post on 01-Nov-2014

58 views

Category:

Documents


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Java swing

Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590

Noções de Design Gráfico

Unidade IV – Estudo aplicado em ambientes heterogêneos

Page 2: Java swing

Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590

Objetivo

Realizar estudo prático de produção de interfaces em ambientes heterogêneos (web,

desktop e móvel) usando ferramentas de autoria.

Página da disciplina na Web

Page 3: Java swing

Prof. Nécio Veras

Interfaces gráficas usando SwingInterfaces gráficas usando Swing

Adaptado por: Nécio de Lima VerasAdaptado por: Nécio de Lima [email protected]@ifce.edu.br

Objetivo: revisar os comandos da API SwingObjetivo: revisar os comandos da API Swing

Créditos: Regis Pires Magalhães – [email protected]

Page 4: Java swing

Prof. Nécio Veras

Leitura recomendadaLeitura recomendada

http://java.sun.com/docs/books/tutorial/ui/features/compWin.html

Page 5: Java swing

Prof. Nécio Veras

Parte I – Fundamentos do Swing

Page 6: Java swing

Prof. Nécio Veras

Interfaces gráficas em Interfaces gráficas em JavaJava

● As bibliotecas gráficas oficiais incluídas no Java são: AWT e Swing;

● Outra biblioteca muito usada é o SWT, desenvolvida pela IBM e usada no IDE Eclipse;

● A complexidade do Swing deve-se ao máximo de portabilidade de busca atingir;

● A aplicação se comporta da mesma forma, independente do sistema operacional em uso;

Page 7: Java swing

Prof. Nécio Veras

AWT e SwingAWT e Swing

● AWT (Abstract Window Toolkit)– Provê facilidades para interface de usuário (IU) em Java.

– Insuficiente para suportar interfaces de usuário complexas.

● Swing– Conjunto de componentes de UI muito mais completo, flexível e

portável do que o provido pela AWT.

– Conjunto de componentes gráficos customizáveis cuja aparência (look-and-feel - L&F) pode ser alterada em tempo de execução.

– Não substitui a AWT.

– Construído no topo das classes que compõem o núcleo das bibliotecas AWT.

Page 8: Java swing

Prof. Nécio Veras

ExemploExemplo

import javax.swing.JOptionPane;

public class FSimples {

public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Oi"); }

}

Page 9: Java swing

Prof. Nécio Veras

Aparência - Look & FeelAparência - Look & Feel

● Identificando a aparência usada...

import javax.swing.JOptionPane;import javax.swing.UIManager;

public class FSimples {

public static void main(String[] args) { JOptionPane.showMessageDialog(null, UIManager.getLookAndFeel()); }

}

Page 10: Java swing

Prof. Nécio Veras

Aparência - Look & FeelAparência - Look & Feel

● Mudando a aparência...import javax.swing.JOptionPane;import javax.swing.UIManager;

public class FSimples {

public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Aparência Padrão: " + UIManager.getLookAndFeel());

try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); }

JOptionPane.showMessageDialog(null, "Aparência do Sistema: " + UIManager.getLookAndFeel()); }

}

Page 11: Java swing

Prof. Nécio Veras

Aparência - Look & FeelAparência - Look & Feel

● Algumas aparências possíveis:– UIManager.getCrossPlatformLookAndFeelClassName()

● Funciona em todas as plataformas (Java L&F)● Java Look and Feel

– “javax.swing.plaf.metal.MetalLookAndFeel”

– UIManager.getSystemLookAndFeelClassName() ● Aparência para a plataforma em uso● No Linux: GTK look and feel

– “com.sun.java.swing.plaf.gtk.GTKLookAndFeel”

● No Windows: Windows look and feel– "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

– Outras aparências podem ser instaladas.

Page 12: Java swing

Prof. Nécio Veras

Componentes AWTComponentes AWT

● Component● Container● Panel● Window● Dialog● Frame● Graphics● Outros:

Page 13: Java swing

Prof. Nécio Veras

ExemploExemplo

import java.awt.*;

public class FrameDemo { public static void main(String args[]) { Frame f = new Frame(); f.setSize(100, 100); f.setVisible(true); }}

Page 14: Java swing

Prof. Nécio Veras

ExemploExemplo

import java.awt.*;

public class PanelDemo extends Panel { public PanelDemo() { this.setBackground(Color.black); }

public void paint(Graphics g) { g.setColor(new Color(0, 255, 0)); // verde g.setFont(new Font("Helvetica", Font.PLAIN, 16)); g.drawString("Hello GUI World!", 30, 100); g.setColor(new Color(1.0f, 0, 0)); // vermelho g.fillRect(30, 100, 150, 10); }

public static void main(String args[]) { Frame f = new Frame("Testing Graphics Panel"); PanelDemo painel = new PanelDemo(); f.add(painel); f.setSize(600, 300); f.setVisible(true); }}

Page 15: Java swing

Prof. Nécio Veras

ExemploExemplo

import java.awt.*;import javax.swing.*;

public class JDesenho extends JPanel{ protected void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, 500, 500); g.setColor(Color.darkGray); g.fillOval(150, 200, 200, 40); g.setColor(Color.red); g.fillOval(100, 80, 150, 150); g.setColor(Color.pink); g.fillOval(120, 105, 30, 30); g.setColor(Color.blue); g.setFont(new Font("Arial Bold", Font.PLAIN, 36)); g.drawString("Java Swing", 30, 50); } public static void main(String args[]) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new JDesenho()); f.setSize(400, 300); f.setVisible(true); }}

Page 16: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Containers de alto nível (top-level):– JFrame

– JApplet

– JDialog

Page 17: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● JComponent – Classe raiz para todos os componentes Swing, excluindo containers de

alto-nível.

● JTextField – Permite a edição de uma única linha de texto.

● JOptionPane – Fornece uma maneira fácil de exibir caixas de diálogo pop-up.

● JFileChooser – Permite ao usuário que selecione um arquivo.

● JColorChooser – Permite ao usuário selecionar uma cor.

Page 18: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Botão – JButton

– Criação de botões com ícones● ImageIcon

– Uso de mnemonic

– Habilitação e desabilitação

– Uso de ações

– Registro de action listener

– Configuração de tooltip

– Texto de botões em HTML

Page 19: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Caixa de Seleção - JCheckBox – Uso de mnemonic

– Marcar e desmarcar

– Registro de action listener● Modificação de estado

Page 20: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Botão de Opção - JRadioButton – Uso de mnemonic

– Usado em conjunto com Grupo de Botões – ButtonGroup – para que apenas um item possa ser selecionado.

– Registro de action listener● Modificação de opção

Page 21: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Painel com Abas - JTabbedPane – Adição de abas / guias

– Modificação de aba selecionada

Page 22: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Divisão de Painel - JSplitPane

– Usado para dividir dois componentes que podem ser redimensionados interativamente pelo usuário.

– Configuração geral e orientação do split

– Posicionamento do divisor

– Restrição de tamanho

do divisor

– SplitPane aninhados

Page 23: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Tabela - JTable – Cria uma tabela para apresentar dados tabulares

● Muito utilizado para mostrar tabelas detalhe de tabelas mestre

– Lado N de relacionamento 1:N

– Pode utilizar diversos modelos de dados

Page 24: Java swing

Prof. Nécio Veras

Componentes SwingComponentes Swing

● Tabela - JTable – Alta flexibilidade para definir a aparência da tabela

Page 25: Java swing

Prof. Nécio Veras

ExemploExemplo

import java.awt.FlowLayout;import javax.swing.*;

public class FTeste {

public static void main(String[] args) { JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout());

JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo);

JButton botao = new JButton(); botao.setText("Botão Inútil"); janela.add(botao);

janela.pack(); janela.setVisible(true); }

}

Page 26: Java swing

Prof. Nécio Veras

Experiências e ExercíciosExperiências e Exercícios

● O que acontece de diferente se as linhas a seguir não estiverem no código?● janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

● janela.setLayout(new FlowLayout());

● janela.pack();

● Para que elas servem?

● Exercício:

– Faça um formulário de cadastro qualquer usando componentes básicos vistos anteriormente, tais como: jLabel, jButton, jTextField, jCheckBox, jRadioButton e jTable, por exemplo.

Page 27: Java swing

Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590

Parte II – Trabalhando com controle de Layouts e tratamentos de

Eventos

Page 28: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● Determinam a disposição e o tamanho dos componentes no contêiner.

Page 29: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● BorderLayout– Layout default para objetos Window e suas

subclasses.

– Posiciona os componentes em 5 áreas● Norte, sul, leste, oeste e centro

Page 30: Java swing

Prof. Nécio Veras

ExemploExemplo

import java.awt.BorderLayout;

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

public class BorderLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new BorderLayout(10, 10)); frm.add(new JButton("NORTH"), BorderLayout.NORTH); frm.add(new JButton("SOUTH"), BorderLayout.SOUTH); frm.add(new JButton("EAST"), BorderLayout.EAST); frm.add(new JButton("WEST"), BorderLayout.WEST); frm.add(new JButton("CENTER"), BorderLayout.CENTER); frm.setSize(200, 200); frm.setVisible(true); }}

Page 31: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● FlowLayout– Gerenciador padrão para Panel e suas

subclasses.

– Posiciona os componentes da esquerda para a direita e de cima para baixo, começando no canto superior esquerdo.

Page 32: Java swing

Prof. Nécio Veras

ExemploExemplo

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

public class FlowLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); frm.add(new JButton("ONE")); frm.add(new JButton("TWO")); frm.add(new JButton("THREE")); frm.setSize(180, 120); frm.setVisible(true); }}

Page 33: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● BoxLayout– Permite posicionar elementos de forma linear

● De cima para baixo● Da esquerda para a direita

Page 34: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● GridLayout– Dispõe os componentes em um grid de linhas e

colunas.

– Cada componente ocupa o espaço exato de uma célula.

– Posiciona os componentes da esquerda para a direita e de cima para baixo.

Page 35: Java swing

Prof. Nécio Veras

ExemploExemplo

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

public class GridLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new GridLayout(2, 3, 4, 4)); frm.add(new JButton("ONE")); frm.add(new JButton("TWO")); frm.add(new JButton("THREE")); frm.add(new JButton("FOUR")); frm.add(new JButton("FIVE")); frm.setSize(200, 200); frm.setVisible(true); }}

Page 36: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● GridBagLayout– Layout mais flexível e mais complexo do Swing

– Dispõe os componentes em um grid de linhas e colunas

● Componentes podem se estender a várias linhas ou colunas

Page 37: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● GroupLayout– Nativo no Swing a partir do Java 6.

– Agrupa componentes hierarquicamente para posicioná-los em um contêiner.

– Foi projetado especialmente para uso em construtores de tela, mas pode ser codificado manualmente.

– Suporta 2 tipos de agrupamentos:● Sequencial – elementos são posicionados

sequencialmente, um após o outro.● Paralelo – Alinha os elementos em 1 de 4 maneiras

possíveis.

Page 38: Java swing

Prof. Nécio Veras

Gerenciadores de Layout – Gerenciadores de Layout – Layout ManagersLayout Managers

● O GroupLayout permite:

– Alinhar componentes horizontal e verticalmente;

– Inserir componentes inteligentemente;

– Alinhar a margem dos componentes;

– Esticar os componentes para esquerda, direita ou ambos;

– Esticar os componentes para o alto, baixo ou ambos;

– Definir o alinhamento, tamanho e espaçamento.

Page 39: Java swing

Prof. Nécio Veras

EventosEventos

Page 40: Java swing

Prof. Nécio Veras

EventosEventos

● Implementação de manipuladores de eventos

– Declaração de classe que implementa a interface para tratamento de eventos do tipo requerido.

– Código que implementa os métodos definidos na interface listener.

– Registro de instâncias de classe manipuladoras de eventos como ouvintes para o evento do componente desejado.

● Adição de ouvintes através de métodos como:– addActionListener– addWindowListener

Page 41: Java swing

Prof. Nécio Veras

EventosEventos

● Exemplos de Ouvintes usados no Swing:– ActionListener

● Cliques em botões, Enter em campos, cliques em menus

– WindowListener● Manipulação de frames

– MouseListener e MouseMotionListener● Pressionamento de botão do mouse sobre

componentes● Movimentação do mouse sobre componentes

Page 42: Java swing

Prof. Nécio Veras

Implementando OuvinteImplementando Ouvinte

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JOptionPane;

public class MeuOuvinte implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Ação!!!"); }}

Page 43: Java swing

Prof. Nécio Veras

Registrando um OuvinteRegistrando um Ouvinte

import java.awt.FlowLayout;import javax.swing.*;

public class FTeste { public static void main(String[] args) { JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout());

JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo);

JButton botao = new JButton(); botao.setText("Botão Útil"); botao.addActionListener(new MeuOuvinte()); janela.add(botao); janela.pack(); janela.setVisible(true); }}

Page 44: Java swing

Prof. Nécio Veras

Registrando e Implementando Registrando e Implementando Ouvinte através de uma classe Ouvinte através de uma classe

interna estáticainterna estática

import java.awt.FlowLayout;import java.awt.event.*;import javax.swing.*;

public class FTeste { public static void main(String[] args) { final JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout());

JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo);

JButton botao = new JButton(); botao.setText("Botão Útil");

botao.addActionListener(new MeuOuvinte());

janela.add(botao);

janela.pack(); janela.setVisible(true); } public static class MeuOuvinte implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Ação!!!"); } }}

Page 45: Java swing

Prof. Nécio Veras

Registrando e Implementando Registrando e Implementando Ouvinte através de uma classe Ouvinte através de uma classe

interna anônimainterna anônimaimport java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;

public class FTeste { public static void main(String[] args) { final JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout());

JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo);

JButton botao = new JButton(); botao.setText("Botão Útil");

botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(janela, "Ação!!!"); } });

janela.add(botao);

janela.pack(); janela.setVisible(true); }}

Page 46: Java swing

Prof. Nécio Veras

ExercícioExercício

● Construa uma calculadora simples baseada na interface gráfica abaixo.● Os resultados devem estar desabilitados.● Deve haver teclas de atalho para acessar as caixas de texto e os botões.● Deve haver dicas para explicar as caixas de texto e botões.● Os números só devem ser aceitos se forem válidos.

● Dica: – Botão padrão:

● this.getRootPane().setDefaultButton(jButtonCalcula);