gui aplicações gráficas
DESCRIPTION
Introdução ao desenvolvimento de aplicações gráficas com Java utilizando swing.TRANSCRIPT
![Page 2: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/2.jpg)
AWT x Swing
AWT ou Abstract Window Toolkit é o antigo conjunto de ferramentas para interfaces gráficas do Javaoferecer infraestrutura mínima de interface gráficaaparência e recursos dependente da plataformaBugs e incompatibilidades entre plataformas
JFC (Java Foundation Classes) oferece uma interface muito mais ricaSwing é o nome dado à coleção de componentesÉ preciso importar java.awt e javax.swing para usar JFCUma das mais completas bibliotecas gráficas já criadasBaseada em JavaBeans: ferramentas GUI conseguem
gerar código legível e reutilizável
![Page 3: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/3.jpg)
Demo Swing
Veja demo:$JAVA_HOME/demo/jfc/SwingSet2/ java -jar SwingSet2.jar SwingSet2
![Page 4: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/4.jpg)
Tipos de aplicações
AppletsAplicações especiais que rodam a partir de um browser
Aplicações Aplicações standalone iniciadas via sistema operacional
Ambas capturam eventos do sistema e desenham-se
sobre um contexto gráfico fornecido pelo sistema
![Page 5: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/5.jpg)
Componente (JComponent)
Raiz da hierarquia de componentes gráficosComponentes Swing herdam de javax.swing.JComponentExiste um Component por trás de tudo que pode ser
desenhado na telaPrincipais métodos (chamados pelo sistema):void paint (Graphics g)void repaint()void update(Graphics g)
![Page 6: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/6.jpg)
Containers essenciais
Subclasse de java.awt.Component São "recipientes." Podem conter outros componentes.São descendentes da classe Container: Frame, Panel,
Applet e JComponent (raiz da hierarquia dos componentes Swing)
Frame (AWT) e JFrame (Swing)Servem de base para qualquer aplicação gráfica
Panel e JPanelContainer de propósito geralServe para agrupar outros componentes e permitir layout
em camadasApplet e JApplet
Tipo de Panel (JPanel) que serve de base para aplicaçõesque rodam dentro de browsers
![Page 7: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/7.jpg)
Exemplo de JFrame
import java.awt.*;import javax.swing.*;
public class Janela extends JFrame {
public Janela(String nome) { super(nome); this.setSize(400,350); this.setVisible(true); } public static void main(String[] args) { new Janela("Janela 1.0"); }}
![Page 8: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/8.jpg)
AWT Thread
Thread que é responsável pela atualização do contexto gráficoChama update() e passa referência para o contexto
gráfico como argumento sempre que for necessário redesenhá-lo.
Método update(Graphics g)1. Limpa a área a ser redesenhada2. Chama paint(g)
Métodos update() e paint() nunca devem ser chamados diretamente a partir do thread principal
Use repaint(), que faz o agendamento de uma chamada a update() através do AWT thread
![Page 9: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/9.jpg)
Graphics
Representa o contexto gráfico de cada componentePassado pelo sistema quando chama update()Programador pode desenhar no componente usando
referência recebida via paint() ao sobrepor o método:public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; Shape s = new Ellipse2D.Double(); g2.setColor(Color.red); g2.draw(s);}
Para definir o que será desenhado em determinado componente, sobreponha seu método paint() Use a classe Graphics2D para obter mais recursos
![Page 10: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/10.jpg)
Applets
Aplicação gráfica que roda em browserToda a infraestrutura herdada da classe javax.swing.JApplet
(ou java.applet.Applet)É um componente de um framework que executa em
ambiente de execução (container) no browser
Métodos de JApplet, chamados automaticamente, devem
ser sobrepostos. Ciclo de vida:init() - inicialização dos componentes do appletstart() - o que fazer quando applet iniciarstop() - o que fazer antes de applet parardestroy() - o que fazer quando applet terminarpaint() - o que desenhar no contexto gráfico
![Page 11: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/11.jpg)
Exemplo
import javax.swing.*;import java.awt.*;
public class HelloApplet extends JApplet { public void init() { Container pane = this.getContentPane(); JLabel msg = new JLabel("Hello Web"); pane.add(msg); }}
Para iniciar o apllet no no HTML, inserir:<applet code="HelloApplet" height="50" width="200"></applet> (java 1.1) No Java 2 a tag <applet> foi substituida por <object>java -jar $JAVA_HOME/lib/htmlconverter.jar -gui
![Page 12: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/12.jpg)
Restrições dos applets
Há várias coisas que aplicações comuns podem e que um applet não pode fazer:Não pode carregar bibliotecas ou definir métodos nativosNão pode ler ou escrever arquivos na máquina clienteNão pode fazer conexões de rede a não ser para a máquina
de onde veioNão pode iniciar a execução de nenhum programa na
máquina do clienteNão tem acesso à maior parte das propriedades do sistemaJanelas abertas sempre têm aviso de segurança
Várias restrições podem ser flexibilizadas se o applet for assinado.
![Page 13: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/13.jpg)
Recursos gráficos básicos: Fontes e Cores
Qualquer componente pode mudar a sua fonte e corA mudança afeta todos os componentes contidos no
componente afetadoCores
instância da classe java.awt.Colorcomponente.setBackground(new Color(255,0,0));
componente.setForeGround(Color.yellow);
Fontesinstância da classe java.awt.FontFont f = new Font("SansSerif", Font.BOLD, 24);
componente.setFont(f);
![Page 14: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/14.jpg)
Exemplo
...public Janela(String nome) { super(nome); this.setSize(400,350); this.setVisible(true); JLabel texto = new JLabel(); texto.setText("Texto"); texto.setForeground(Color.BLUE); Font font = new Font("SansSerif", Font.BOLD, 24); texto.setFont(font); this.add(texto); this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);}...
![Page 15: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/15.jpg)
Layouts
Há duas formas de acrescentar componentes em um containerUsar um algoritmo de posicionamento (layout manager)
para dimensionar e posicionar os componentes (esta é a maneira recomendada e default)
Desligar o algoritmo de layout e posicionar e redimensionar os componentes diretamente (pixels)
Todo container tem um algoritmo de layout defaultFrame e JFrame: BorderLayout (layout "geográfico")Outros Containers: FlowLayout (layout seqüencial)
![Page 16: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/16.jpg)
JFrame
Existe uma área independente de plataforma que cobre a área útil do Jframe, o ContentPane. O layout é definido no ContentPaneObjetos são adicionados no ContentPaneCores e fontes devem ser definidas a partir do ContentPane
Para obter o ContentPane use:Container pane = frame.getContentPane();
Para definir um layout (diferente de BorderLayout) use:pane.setLayout(referência_para_layout);
![Page 17: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/17.jpg)
FlowLayout, JButton, Icon
FlowLayoutÉ o layout mais simplesDispõe os componentes um depois do outroEstilo padrão é centralizadopane.setLayout(new FlowLayout());
JButtonBotões simplesAceitam textos ou imagensJButton b1 = new Button("texto");
JButton b2 = new Button("texto", icone);
Ícones de imagemIcon icone = new ImageIcon("caminho");Caminho do arquivo (/pasta/figura.jpg)
![Page 18: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/18.jpg)
Exemplo
...public class Janela extends JFrame { public Janela(String nome) { super(nome); this.setLayout(new FlowLayout()); JButton b1 = new JButton("Botao"); JButton b2 = new JButton("Sair"); this.add(b1); this.add(b2); this.setSize(400, 350); this.setVisible(true); } public static void main(String[] args) { new Janela("Janela 1.2"); }}
![Page 19: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/19.jpg)
Componentes de Texto
JTextField - campo de entrada de dados simplesJpasswordField – campo para entrada de dados ocultosJtextArea – campo de entrada de texto multilinhaJeditorPane – editor que entende HTML e RTFJtextPane – editor sofisticado com vários recursos
Principais métodosgetText(); - recupera o texto contido no componentesetText(valor); - substitui o texto com outro
![Page 20: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/20.jpg)
Layout null
Algoritmos de layout podem ser combinados para obter qualquer configuraçãoMais fáceis de manter e reutilizarLayout em camadas e "orientado a objetos"Controlam posicionamento e dimensão de componentes
Para desligar layoutspane.setLayout(null);
Agora é preciso definir posição e tamanho de cada componentecomponente.setBounds(x, y, larg, alt);
![Page 21: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/21.jpg)
Exemplo
...public Janela(String nome) { super(nome); this.setLayout(null); b1 = new JButton("Vermelha"); b2 = new JButton("Verde"); b3 = new JButton("Azul"); b1.setBounds(10, 10, 150, 40); b2.setBounds(10, 60, 150, 40); b3.setBounds(10, 110, 150, 40); this.add(b1); this.add(b2); this.add(b3); this.setSize(200, 200); this.setVisible(true);this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); }...
![Page 22: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/22.jpg)
Outros Layout Managers
GridLayout (linhas, colunas) Layout que posiciona os elementos como elementos de
uma tabelaBorderLayout
Layout que posiciona elementos em quatro posições "cardeais" e no centroNorte e Sul têm prioridade sobre Leste e Oeste que têm
prioridade sobre Centro
Constantes BorderLayout.CENTER, BorderLayout.WEST, BorderLayout.NORTH, etc.
BoxLayout e GridBagLayoutPermitem layouts sofisticados com amplo contro
![Page 23: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/23.jpg)
Exemplo
...public Janela(String nome) { super(nome); this.setLayout(new BorderLayout()); b1 = new JButton("Vermelha",); b2 = new JButton("Verde"); b3 = new JButton("Azul"); this.add(b1,BorderLayout.SOUTH); this.add(b2,BorderLayout.CENTER); this.add(b3,BorderLayout.NORTH); this.setSize(200, 200); this.setVisible(true);this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); }...
![Page 24: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/24.jpg)
Combinação de Layouts
Componentes podem ser combinados em recipientes (como JPanel) para serem tratados como um conjuntoJPanel p = new JPanel();p.setLayout(layout do JPanel);p.add(comp1);p.add(comp2);pane.add(BorderLayout.EAST, p);
Possibilita a criação de layouts complexos que consistem de várias camadas
Cada JPanel é uma camada
![Page 25: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/25.jpg)
Exemplo (1/2)
import javax.swing.*;import java.awt.*;
public class Janela extends JFrame {
public Janela(String nome) { super(nome); this.setLayout(new BorderLayout()); JPanel botoes = new JPanel(); botoes.setBackground(Color.YELLOW); botoes.setLayout(new GridLayout(3,1)); botoes.add(new JButton("Um")); botoes.add(new JButton("Dois")); botoes.add(new JButton("Três")); JPanel lateral = new JPanel(); lateral.add(botoes);
![Page 26: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/26.jpg)
Exemplo (2/2)
this.add(BorderLayout.CENTER, new JEditorPane()); this.add(BorderLayout.WEST, lateral); this.setSize(400,350); this.setVisible(true); this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); }
public static void main(String[] args) { new Janela("Janela 1.5"); }}
![Page 27: GUI Aplicações Gráficas](https://reader033.vdocuments.net/reader033/viewer/2022052618/5549d492b4c9051c778b4f51/html5/thumbnails/27.jpg)
Exercício
1. Construa uma aplicação gráfica que contenha três botões (JButton), um JTextField e um JTextPane distribuídos da seguinte formaUse Use BorderLayout para distribuir os componentes
JTextField, JEditorPane e JPanelUse GridLayout para distribuir os botões