java swing
Post on 01-Nov-2014
59 Views
Preview:
DESCRIPTION
TRANSCRIPT
Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590
Noções de Design Gráfico
Unidade IV – Estudo aplicado em ambientes heterogêneos
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
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 Verasnecio.veras@ifce.edu.brnecio.veras@ifce.edu.br
Objetivo: revisar os comandos da API SwingObjetivo: revisar os comandos da API Swing
Créditos: Regis Pires Magalhães – regis@ifpi.edu.br
Prof. Nécio Veras
Leitura recomendadaLeitura recomendada
http://java.sun.com/docs/books/tutorial/ui/features/compWin.html
Prof. Nécio Veras
Parte I – Fundamentos do 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;
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.
Prof. Nécio Veras
ExemploExemplo
import javax.swing.JOptionPane;
public class FSimples {
public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Oi"); }
}
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()); }
}
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()); }
}
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.
Prof. Nécio Veras
Componentes AWTComponentes AWT
● Component● Container● Panel● Window● Dialog● Frame● Graphics● Outros:
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); }}
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); }}
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); }}
Prof. Nécio Veras
Componentes SwingComponentes Swing
● Containers de alto nível (top-level):– JFrame
– JApplet
– JDialog
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.
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
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
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
Prof. Nécio Veras
Componentes SwingComponentes Swing
● Painel com Abas - JTabbedPane – Adição de abas / guias
– Modificação de aba selecionada
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
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
Prof. Nécio Veras
Componentes SwingComponentes Swing
● Tabela - JTable – Alta flexibilidade para definir a aparência da tabela
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); }
}
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.
Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590
Parte II – Trabalhando com controle de Layouts e tratamentos de
Eventos
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.
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
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); }}
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.
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); }}
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
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.
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); }}
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
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.
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.
Prof. Nécio Veras
EventosEventos
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
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
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!!!"); }}
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); }}
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!!!"); } }}
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); }}
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);
top related