SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
GUI
Aplicações Gráficas
Mario Jorge Pereira
mariojp@gmail.com
AWT x Swing
AWT ou Abstract Window Toolkit é o antigo conjunto de
ferramentas para interfaces gráficas do Java
oferecer infraestrutura mínima de interface gráfica
aparência e recursos dependente da plataforma
Bugs e incompatibilidades entre plataformas
JFC (Java Foundation Classes) oferece uma interface
muito mais rica
Swing é o nome dado à coleção de componentes
É preciso importar java.awt e javax.swing para usar JFC
Uma das mais completas bibliotecas gráficas já criadas
Baseada em JavaBeans: ferramentas GUI conseguem
gerar código legível e reutilizável
Demo Swing
Veja demo:
$JAVA_HOME/demo/jfc/SwingSet2/
java -jar SwingSet2.jar SwingSet2
Tipos de aplicações
Applets
Aplicaçõ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
Componente (JComponent)
Raiz da hierarquia de componentes gráficos
Componentes Swing herdam de javax.swing.JComponent
Existe um Component por trás de tudo que pode ser
desenhado na tela
Principais métodos (chamados pelo sistema):
void paint (Graphics g)
void repaint()
void update(Graphics g)
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 JPanel
Container de propósito geral
Serve para agrupar outros componentes e permitir layout
em camadas
Applet e JApplet
Tipo de Panel (JPanel) que serve de base para aplicações
que rodam dentro de browsers
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");
}
}
AWT Thread
Thread que é responsável pela atualização do contexto
gráfico
Chama 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 redesenhada
2. 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
Graphics
Representa o contexto gráfico de cada componente
Passado 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
Applets
Aplicação gráfica que roda em browser
Toda 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 applet
start() - o que fazer quando applet iniciar
stop() - o que fazer antes de applet parar
destroy() - o que fazer quando applet terminar
paint() - o que desenhar no contexto gráfico
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
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 nativos
Não pode ler ou escrever arquivos na máquina cliente
Não pode fazer conexões de rede a não ser para a máquina
de onde veio
Não pode iniciar a execução de nenhum programa na
máquina do cliente
Não tem acesso à maior parte das propriedades do sistema
Janelas abertas sempre têm aviso de segurança
Várias restrições podem ser flexibilizadas se o applet for
assinado.
Recursos gráficos básicos: Fontes e Cores
Qualquer componente pode mudar a sua fonte e cor
A mudança afeta todos os componentes contidos no
componente afetado
Cores
instância da classe java.awt.Color
componente.setBackground(new Color(255,0,0));
componente.setForeGround(Color.yellow);
Fontes
instância da classe java.awt.Font
Font f = new Font("SansSerif", Font.BOLD, 24);
componente.setFont(f);
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.WindowCo
nstants.EXIT_ON_CLOSE);
}
...
Layouts
Há duas formas de acrescentar componentes em um
container
Usar 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 default
Frame e JFrame: BorderLayout (layout "geográfico")
Outros Containers: FlowLayout (layout seqüencial)
JFrame
Existe uma área independente de plataforma que cobre a
área útil do Jframe, o ContentPane.
O layout é definido no ContentPane
Objetos são adicionados no ContentPane
Cores 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);
FlowLayout, JButton, Icon
FlowLayout
É o layout mais simples
Dispõe os componentes um depois do outro
Estilo padrão é centralizado
pane.setLayout(new FlowLayout());
JButton
Botões simples
Aceitam textos ou imagens
JButton b1 = new Button("texto");
JButton b2 = new Button("texto", icone);
Ícones de imagem
Icon icone = new ImageIcon("caminho");
Caminho do arquivo (/pasta/figura.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");
}
}
Componentes de Texto
JTextField - campo de entrada de dados simples
JpasswordField – campo para entrada de dados ocultos
JtextArea – campo de entrada de texto multilinha
JeditorPane – editor que entende HTML e RTF
JtextPane – editor sofisticado com vários recursos
Principais métodos
getText(); - recupera o texto contido no componente
setText(valor); - substitui o texto com outro
Layout null
Algoritmos de layout podem ser combinados para obter
qualquer configuração
Mais fáceis de manter e reutilizar
Layout em camadas e "orientado a objetos"
Controlam posicionamento e dimensão de componentes
Para desligar layouts
pane.setLayout(null);
Agora é preciso definir posição e tamanho de cada
componente
componente.setBounds(x, y, larg, alt);
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.WindowConstan
ts.EXIT_ON_CLOSE);
}
...
Outros Layout Managers
GridLayout (linhas, colunas)
Layout que posiciona os elementos como elementos de
uma tabela
BorderLayout
Layout que posiciona elementos em quatro posições
"cardeais" e no centro
Norte 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 GridBagLayout
Permitem layouts sofisticados com amplo contro
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.WindowConstan
ts.EXIT_ON_CLOSE);
}
...
Combinação de Layouts
Componentes podem ser combinados em recipientes
(como JPanel) para serem tratados como um conjunto
JPanel 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
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);
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.WindowConstan
ts.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Janela("Janela 1.5");
}
}
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 forma
Use Use BorderLayout para distribuir os componentes
JTextField, JEditorPane e JPanel
Use GridLayout para distribuir os botões

Más contenido relacionado

La actualidad más candente

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de JogoBruno Cicanci
 
DevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsDevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsSuelen Carvalho
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipseArmando Daniel
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dadosSérgio Souza Costa
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em JavaMarco Reis
 
Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Sérgio Souza Costa
 

La actualidad más candente (12)

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Java AWT
Java AWTJava AWT
Java AWT
 
Java gui
Java guiJava gui
Java gui
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de Jogo
 
Guia xna
Guia xnaGuia xna
Guia xna
 
DevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsDevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com Fragments
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em Java
 
Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)
 

Destacado

Introdução à teoria da interactividade
Introdução à teoria da interactividadeIntrodução à teoria da interactividade
Introdução à teoria da interactividadeJoão Sá
 
Teoria da interactividade
Teoria da interactividadeTeoria da interactividade
Teoria da interactividadeCarlos Barbosa
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioFabio Moura Pereira
 
Introdução à teoria da interatividade
Introdução à teoria da interatividadeIntrodução à teoria da interatividade
Introdução à teoria da interatividadeLuís
 
Graphical User Interface (Gui)
Graphical User Interface (Gui)Graphical User Interface (Gui)
Graphical User Interface (Gui)Bilal Amjad
 

Destacado (8)

Trabalho gui
Trabalho guiTrabalho gui
Trabalho gui
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Interface grafica do usuario
Interface grafica do usuarioInterface grafica do usuario
Interface grafica do usuario
 
Introdução à teoria da interactividade
Introdução à teoria da interactividadeIntrodução à teoria da interactividade
Introdução à teoria da interactividade
 
Teoria da interactividade
Teoria da interactividadeTeoria da interactividade
Teoria da interactividade
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do Usuário
 
Introdução à teoria da interatividade
Introdução à teoria da interatividadeIntrodução à teoria da interatividade
Introdução à teoria da interatividade
 
Graphical User Interface (Gui)
Graphical User Interface (Gui)Graphical User Interface (Gui)
Graphical User Interface (Gui)
 

Similar a GUI Swing Components Layout

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoLuiz Carvalho
 
Graphics Capabilities of Java Platform
Graphics Capabilities of Java PlatformGraphics Capabilities of Java Platform
Graphics Capabilities of Java PlatformMichel Alves
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusDenis L Presciliano
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de AndroidTiago Barreto
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidTiago Bencardino
 
Introducao a Linguagem Kotlin
Introducao a Linguagem KotlinIntroducao a Linguagem Kotlin
Introducao a Linguagem KotlinCalebeMiquissene
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 

Similar a GUI Swing Components Layout (20)

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android Básico
 
Graphics Capabilities of Java Platform
Graphics Capabilities of Java PlatformGraphics Capabilities of Java Platform
Graphics Capabilities of Java Platform
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de Android
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - Android
 
Introducao a Linguagem Kotlin
Introducao a Linguagem KotlinIntroducao a Linguagem Kotlin
Introducao a Linguagem Kotlin
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Model View Controller
Model View ControllerModel View Controller
Model View Controller
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 

Más de Mario Jorge Pereira (20)

Java www
Java wwwJava www
Java www
 
Html
HtmlHtml
Html
 
HTTP
HTTPHTTP
HTTP
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Java Nuvem Appengine
Java Nuvem AppengineJava Nuvem Appengine
Java Nuvem Appengine
 
Mini curso Android
Mini curso AndroidMini curso Android
Mini curso Android
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Minicurso Android
Minicurso AndroidMinicurso Android
Minicurso Android
 
Android, por onde começar?
Android, por onde começar?Android, por onde começar?
Android, por onde começar?
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 
Android e Cloud Computing
Android e Cloud ComputingAndroid e Cloud Computing
Android e Cloud Computing
 
Threads
ThreadsThreads
Threads
 
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) RMI (Remote Method Invocation)
RMI (Remote Method Invocation)
 
Socket
SocketSocket
Socket
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
GUI - Eventos
GUI - EventosGUI - Eventos
GUI - Eventos
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 

Último

Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfaulasgege
 
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxconcelhovdragons
 
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptx
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptxPOETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptx
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptxJMTCS
 
Sistema de Bibliotecas UCS - A descoberta da terra
Sistema de Bibliotecas UCS  - A descoberta da terraSistema de Bibliotecas UCS  - A descoberta da terra
Sistema de Bibliotecas UCS - A descoberta da terraBiblioteca UCS
 
Orientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxOrientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxJMTCS
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbyasminlarissa371
 
Geometria 5to Educacion Primaria EDU Ccesa007.pdf
Geometria  5to Educacion Primaria EDU  Ccesa007.pdfGeometria  5to Educacion Primaria EDU  Ccesa007.pdf
Geometria 5to Educacion Primaria EDU Ccesa007.pdfDemetrio Ccesa Rayme
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...Martin M Flynn
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosAntnyoAllysson
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptAlineSilvaPotuk
 
Linguagem verbal , não verbal e mista.pdf
Linguagem verbal , não verbal e mista.pdfLinguagem verbal , não verbal e mista.pdf
Linguagem verbal , não verbal e mista.pdfLaseVasconcelos1
 
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxSlides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxLuizHenriquedeAlmeid6
 
Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024GleyceMoreiraXWeslle
 
HABILIDADES ESSENCIAIS - MATEMÁTICA 4º ANO.pdf
HABILIDADES ESSENCIAIS  - MATEMÁTICA 4º ANO.pdfHABILIDADES ESSENCIAIS  - MATEMÁTICA 4º ANO.pdf
HABILIDADES ESSENCIAIS - MATEMÁTICA 4º ANO.pdfdio7ff
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Currículo escolar na perspectiva da educação inclusiva.pdf
Currículo escolar na perspectiva da educação inclusiva.pdfCurrículo escolar na perspectiva da educação inclusiva.pdf
Currículo escolar na perspectiva da educação inclusiva.pdfIedaGoethe
 
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdf
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdfTIPOS DE DISCURSO - TUDO SALA DE AULA.pdf
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdfmarialuciadasilva17
 
Slides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfSlides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfpaulafernandes540558
 

Último (20)

Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdf
 
treinamento brigada incendio 2024 no.ppt
treinamento brigada incendio 2024 no.ppttreinamento brigada incendio 2024 no.ppt
treinamento brigada incendio 2024 no.ppt
 
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
 
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptx
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptxPOETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptx
POETAS CONTEMPORANEOS_TEMATICAS_explicacao.pptx
 
Sistema de Bibliotecas UCS - A descoberta da terra
Sistema de Bibliotecas UCS  - A descoberta da terraSistema de Bibliotecas UCS  - A descoberta da terra
Sistema de Bibliotecas UCS - A descoberta da terra
 
Orientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxOrientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptx
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Geometria 5to Educacion Primaria EDU Ccesa007.pdf
Geometria  5to Educacion Primaria EDU  Ccesa007.pdfGeometria  5to Educacion Primaria EDU  Ccesa007.pdf
Geometria 5to Educacion Primaria EDU Ccesa007.pdf
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteiros
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
 
Linguagem verbal , não verbal e mista.pdf
Linguagem verbal , não verbal e mista.pdfLinguagem verbal , não verbal e mista.pdf
Linguagem verbal , não verbal e mista.pdf
 
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxSlides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
 
Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024Apresentação sobre o Combate a Dengue 2024
Apresentação sobre o Combate a Dengue 2024
 
HABILIDADES ESSENCIAIS - MATEMÁTICA 4º ANO.pdf
HABILIDADES ESSENCIAIS  - MATEMÁTICA 4º ANO.pdfHABILIDADES ESSENCIAIS  - MATEMÁTICA 4º ANO.pdf
HABILIDADES ESSENCIAIS - MATEMÁTICA 4º ANO.pdf
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
 
Currículo escolar na perspectiva da educação inclusiva.pdf
Currículo escolar na perspectiva da educação inclusiva.pdfCurrículo escolar na perspectiva da educação inclusiva.pdf
Currículo escolar na perspectiva da educação inclusiva.pdf
 
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdf
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdfTIPOS DE DISCURSO - TUDO SALA DE AULA.pdf
TIPOS DE DISCURSO - TUDO SALA DE AULA.pdf
 
Slides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfSlides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdf
 

GUI Swing Components Layout

  • 1. GUI Aplicações Gráficas Mario Jorge Pereira mariojp@gmail.com
  • 2. AWT x Swing AWT ou Abstract Window Toolkit é o antigo conjunto de ferramentas para interfaces gráficas do Java oferecer infraestrutura mínima de interface gráfica aparência e recursos dependente da plataforma Bugs e incompatibilidades entre plataformas JFC (Java Foundation Classes) oferece uma interface muito mais rica Swing é o nome dado à coleção de componentes É preciso importar java.awt e javax.swing para usar JFC Uma das mais completas bibliotecas gráficas já criadas Baseada em JavaBeans: ferramentas GUI conseguem gerar código legível e reutilizável
  • 4. Tipos de aplicações Applets Aplicaçõ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
  • 5. Componente (JComponent) Raiz da hierarquia de componentes gráficos Componentes Swing herdam de javax.swing.JComponent Existe um Component por trás de tudo que pode ser desenhado na tela Principais métodos (chamados pelo sistema): void paint (Graphics g) void repaint() void update(Graphics g)
  • 6. 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 JPanel Container de propósito geral Serve para agrupar outros componentes e permitir layout em camadas Applet e JApplet Tipo de Panel (JPanel) que serve de base para aplicações que rodam dentro de browsers
  • 7. 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"); } }
  • 8. AWT Thread Thread que é responsável pela atualização do contexto gráfico Chama 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 redesenhada 2. 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
  • 9. Graphics Representa o contexto gráfico de cada componente Passado 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
  • 10. Applets Aplicação gráfica que roda em browser Toda 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 applet start() - o que fazer quando applet iniciar stop() - o que fazer antes de applet parar destroy() - o que fazer quando applet terminar paint() - o que desenhar no contexto gráfico
  • 11. 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
  • 12. 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 nativos Não pode ler ou escrever arquivos na máquina cliente Não pode fazer conexões de rede a não ser para a máquina de onde veio Não pode iniciar a execução de nenhum programa na máquina do cliente Não tem acesso à maior parte das propriedades do sistema Janelas abertas sempre têm aviso de segurança Várias restrições podem ser flexibilizadas se o applet for assinado.
  • 13. Recursos gráficos básicos: Fontes e Cores Qualquer componente pode mudar a sua fonte e cor A mudança afeta todos os componentes contidos no componente afetado Cores instância da classe java.awt.Color componente.setBackground(new Color(255,0,0)); componente.setForeGround(Color.yellow); Fontes instância da classe java.awt.Font Font f = new Font("SansSerif", Font.BOLD, 24); componente.setFont(f);
  • 14. 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.WindowCo nstants.EXIT_ON_CLOSE); } ...
  • 15. Layouts Há duas formas de acrescentar componentes em um container Usar 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 default Frame e JFrame: BorderLayout (layout "geográfico") Outros Containers: FlowLayout (layout seqüencial)
  • 16. JFrame Existe uma área independente de plataforma que cobre a área útil do Jframe, o ContentPane. O layout é definido no ContentPane Objetos são adicionados no ContentPane Cores 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);
  • 17. FlowLayout, JButton, Icon FlowLayout É o layout mais simples Dispõe os componentes um depois do outro Estilo padrão é centralizado pane.setLayout(new FlowLayout()); JButton Botões simples Aceitam textos ou imagens JButton b1 = new Button("texto"); JButton b2 = new Button("texto", icone); Ícones de imagem Icon icone = new ImageIcon("caminho"); Caminho do arquivo (/pasta/figura.jpg)
  • 18. 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"); } }
  • 19. Componentes de Texto JTextField - campo de entrada de dados simples JpasswordField – campo para entrada de dados ocultos JtextArea – campo de entrada de texto multilinha JeditorPane – editor que entende HTML e RTF JtextPane – editor sofisticado com vários recursos Principais métodos getText(); - recupera o texto contido no componente setText(valor); - substitui o texto com outro
  • 20. Layout null Algoritmos de layout podem ser combinados para obter qualquer configuração Mais fáceis de manter e reutilizar Layout em camadas e "orientado a objetos" Controlam posicionamento e dimensão de componentes Para desligar layouts pane.setLayout(null); Agora é preciso definir posição e tamanho de cada componente componente.setBounds(x, y, larg, alt);
  • 21. 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.WindowConstan ts.EXIT_ON_CLOSE); } ...
  • 22. Outros Layout Managers GridLayout (linhas, colunas) Layout que posiciona os elementos como elementos de uma tabela BorderLayout Layout que posiciona elementos em quatro posições "cardeais" e no centro Norte 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 GridBagLayout Permitem layouts sofisticados com amplo contro
  • 23. 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.WindowConstan ts.EXIT_ON_CLOSE); } ...
  • 24. Combinação de Layouts Componentes podem ser combinados em recipientes (como JPanel) para serem tratados como um conjunto JPanel 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
  • 25. 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);
  • 26. 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.WindowConstan ts.EXIT_ON_CLOSE); } public static void main(String[] args) { new Janela("Janela 1.5"); } }
  • 27. 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 forma Use Use BorderLayout para distribuir os componentes JTextField, JEditorPane e JPanel Use GridLayout para distribuir os botões