SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Introdução ao
Java Swing
Prof: Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Introdução - interfaces gráficas
Elas são compostas por
elementos como: janelas
Introdução - interfaces gráficas
Elas são compostas por
elementos como: janelas,
botões
Introdução - interfaces gráficas
Elas são compostas por
elementos como: janelas,
botões, caixa de
combinação
Introdução - interfaces gráficas
Elas são compostas por
elementos como: janelas,
botões, caixa de
combinação, botão de
opção
Introdução - interfaces gráficas
Elas são compostas por
elementos como: janelas,
botões, caixa de
combinação, botão de
opção, caixa de texto
Introdução - interfaces gráficas
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
Introdução - interfaces gráficas
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, menus
Introdução - interfaces gráficas
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, menus,
menus de contexto
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
Principais Controles
Introdução
Interface gráfica é composta de:
● Componentes
● Recipientes
● Layout
● Eventos
Componentes e containers
• Componentes são os aspectos visíveis de uma GUI, como botões, menus,
caixas de textos
• São colocados dentro de recipientes (containers).
• Os containers pode conter:
• Um ou mais componentes,
assim como outros
recipientes
• Importante para
construção
de layouts de
complexidade realística
AWT vs Swing
• A Abstract Window Toolkit (AWT) é o antigo conjunto de
ferramentas para interfaces gráficas do Java
• Oferece uma infra-estrutura mínima de interface gráfica
• Componentes têm aparência dependente de plataforma
• Limitado em recursos devido a depender de suporte de cada
plataforma para os componentes oferecidos
• Bugs e incompatibilidades entre plataformas
AWT vs Swing
• O Swing utilizou a base do AWT, mantendo a compatibilidade
com aplicações feitas neste framework,
• fornece um conjunto muito mais rico e conveniente de
componentes para interface com usuário
• eliminou o problema da portabilidade e introduzindo o conceito
de Look and Feel (algo como “visual e essência”)
Principais Controles - Java
Tutorial
Mas o importante agora é
conhecer os componentes
Swing.
Qual é o componente mais
importante entre citados ?
A Janela, cada aplicativo tem a sua
própria, e é nela que temos botões
como fechar, maximizar e minimizar.
Isso, em Swing, uma Janela é
suportada pelo componente
Jframe (todos componentes
swing começa com “J”)
Entendi, basta instancia um
objeto do tipo Jframe. Certo ?
public class SwingOla {
public static void main(String[] args) {
JFrame frame = new JFrame ();
}
}
Nada apareceu
public class SwingOla {
public static void main(String[] args) {
JFrame frame = new JFrame ();
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
Para o Java, o
comportamento padrão para
este botão é minimizar. Se
quiser que ele feche é preciso
“dizer” isso explicitamente.
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);
}
}
Agora, vou adicionar algum
componente a minha Janela,
por exemplo, um botão.
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);
}
}
Este botão é realmente grande,
além disso, como faço para
adicionar alguma ação a ele ?
O Java, precisa saber como
ele vai organizar todos os
componente que você
adiciona.
Ele possui politicas de layout,
o padrão é o “border layout”,
centralizado.
Ele divide a Janela, como
abaixo. Quando adiciona um
novo objeto, ele vai ser
adicionado ao centro.
Estas linhas são então
equivalentes.
frame.add(bt, BorderLayout.CENTER);
frame.add(bt);
frame.add(bt, BorderLayout.NORTH); frame.add(bt, BorderLayout.SOUTH);
frame.add(bt, BorderLayout.EAST); frame.add(bt, BorderLayout.WEST);
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
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.
aContainer.setLayout(new GridLayout(2, 3));
O GridLayout divide o container
em celulas invisiveis, que serão
preenchidas com os componentes.
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);
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);
Ok. Estou começando
entender os layout, mas
agora quero colocar
“ações” aquele meu
aplicativo.
O Java suporta o coneito de eventos, onde os
objetos são divididos fontes (sources) e receptores
(listenners).
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 …
Existem diversos eventos, onde cada
componente pode disparar
determinados eventos. Veremos melhor
sobre eles numa aula futura.
No teu caso, você precisa capturar o
evento “action” do botão. Para isso
precisamos de um objeto receptor para
este tipo de evento.
Existe uma “interface java” para este
receptor, identificada como
ActionListener que possui a assinatura do
método actionPerformed
Este receptor captura o evento e finaliza
a aplicação.
public class Finaliza implements
ActionListener {
@Override
public void actionPerformed(
ActionEvent arg0) {
System.exit(1);
}
}
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.
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
ATIVIDADE: Faça o botão “Diga Ola” mostrar a
seguinte mensagem “Ola”:
JOptionPane.showMessageDialog(
null, "Ola !!");
Entendido os conceitos basico, vou
apresentar agora uma versão melhora
para o mesmo aplicativo.
Usualmente, delegamos a um objeto do
tipo Frame toda a tarefa de montar sua
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
public class SwingOla {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrimeiroSwing j = new PrimeiroSwing();
j.setVisible(true);
}
}
Classe
teste
Esta aula foi apenas uma apresentação
ampla sobre como o Swing funciona.
Entendido como ele funciona, temos que
ler e consultar referencias sobre os
controles e eventos.
Atividade: Construa a mesma aplicação, só
que usando os recursos do Netbeans.
Iremos usá-lo para construir nossas
interfaces daqui para frente.
Desenvolva sua própria calculadora de IMC
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,78
IMC = 21,5
Atividade: A interface pode ser baseada no
seguinte aplicativo:

Mais conteúdo relacionado

Mais procurados

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1Pacc UAB
 
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
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Validação e Testes de Software - MOD1
Validação e Testes de Software - MOD1Validação e Testes de Software - MOD1
Validação e Testes de Software - MOD1Fernando Palma
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticosCentro Paula Souza
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets Hitesh-Java
 
Análise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de SequenciaAnálise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de SequenciaCursoSENAC
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitoselliando dias
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swingArmando Daniel
 
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
 

Mais procurados (20)

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1
 
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)
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Validação e Testes de Software - MOD1
Validação e Testes de Software - MOD1Validação e Testes de Software - MOD1
Validação e Testes de Software - MOD1
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets
 
Análise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de SequenciaAnálise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de Sequencia
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
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
 

Semelhante a Introdução ao Java Swing (Interface)

Semelhante a Introdução ao Java Swing (Interface) (20)

Apostila:Curso de java II
Apostila:Curso de java II  Apostila:Curso de java II
Apostila:Curso de java II
 
Java gui
Java guiJava gui
Java gui
 
Java12
Java12Java12
Java12
 
Applets
AppletsApplets
Applets
 
Java - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissionalJava - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissional
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
CURSO JAVA 02
 
Java10
Java10Java10
Java10
 
Interface Gráfica.ppt
Interface Gráfica.pptInterface Gráfica.ppt
Interface Gráfica.ppt
 
Java14
Java14Java14
Java14
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Revisão de Java paraAV1.docx
Revisão de Java paraAV1.docxRevisão de Java paraAV1.docx
Revisão de Java paraAV1.docx
 
Aula 1 - Introdução à Interface gráfica do JAVA.pdf
Aula 1 - Introdução à Interface gráfica do JAVA.pdfAula 1 - Introdução à Interface gráfica do JAVA.pdf
Aula 1 - Introdução à Interface gráfica do JAVA.pdf
 
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2
 
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Inventor
InventorInventor
Inventor
 
2335 inventor
2335 inventor2335 inventor
2335 inventor
 
Desligar pc
Desligar pcDesligar pc
Desligar pc
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Introdução ao Java Swing (Interface)

  • 1. Introdução ao Java Swing Prof: Sérgio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Introdução - interfaces gráficas Elas são compostas por elementos como: janelas
  • 4. Introdução - interfaces gráficas Elas são compostas por elementos como: janelas, botões
  • 5. Introdução - interfaces gráficas Elas são compostas por elementos como: janelas, botões, caixa de combinação
  • 6. Introdução - interfaces gráficas Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção
  • 7. Introdução - interfaces gráficas Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção, caixa de texto
  • 8. Introdução - interfaces gráficas 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
  • 9. Introdução - interfaces gráficas 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, menus
  • 10. Introdução - interfaces gráficas 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, menus, menus de contexto
  • 11. 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 Principais Controles
  • 12. Introdução Interface gráfica é composta de: ● Componentes ● Recipientes ● Layout ● Eventos
  • 13. Componentes e containers • Componentes são os aspectos visíveis de uma GUI, como botões, menus, caixas de textos • São colocados dentro de recipientes (containers). • Os containers pode conter: • Um ou mais componentes, assim como outros recipientes • Importante para construção de layouts de complexidade realística
  • 14. AWT vs Swing • A Abstract Window Toolkit (AWT) é o antigo conjunto de ferramentas para interfaces gráficas do Java • Oferece uma infra-estrutura mínima de interface gráfica • Componentes têm aparência dependente de plataforma • Limitado em recursos devido a depender de suporte de cada plataforma para os componentes oferecidos • Bugs e incompatibilidades entre plataformas
  • 15. AWT vs Swing • O Swing utilizou a base do AWT, mantendo a compatibilidade com aplicações feitas neste framework, • fornece um conjunto muito mais rico e conveniente de componentes para interface com usuário • eliminou o problema da portabilidade e introduzindo o conceito de Look and Feel (algo como “visual e essência”)
  • 18. Mas o importante agora é conhecer os componentes Swing.
  • 19. Qual é o componente mais importante entre citados ?
  • 20. A Janela, cada aplicativo tem a sua própria, e é nela que temos botões como fechar, maximizar e minimizar.
  • 21. Isso, em Swing, uma Janela é suportada pelo componente Jframe (todos componentes swing começa com “J”)
  • 22. Entendi, basta instancia um objeto do tipo Jframe. Certo ? public class SwingOla { public static void main(String[] args) { JFrame frame = new JFrame (); } }
  • 23. Nada apareceu public class SwingOla { public static void main(String[] args) { JFrame frame = new JFrame (); } }
  • 24. 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); } }
  • 25. 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); } }
  • 26. 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); } }
  • 27. 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); } }
  • 28. Para o Java, o comportamento padrão para este botão é minimizar. Se quiser que ele feche é preciso “dizer” isso explicitamente.
  • 29. 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); } }
  • 30. Agora, vou adicionar algum componente a minha Janela, por exemplo, um botão.
  • 31. 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); } }
  • 32. Este botão é realmente grande, além disso, como faço para adicionar alguma ação a ele ?
  • 33. O Java, precisa saber como ele vai organizar todos os componente que você adiciona.
  • 34. Ele possui politicas de layout, o padrão é o “border layout”, centralizado.
  • 35. Ele divide a Janela, como abaixo. Quando adiciona um novo objeto, ele vai ser adicionado ao centro.
  • 36. Estas linhas são então equivalentes. frame.add(bt, BorderLayout.CENTER); frame.add(bt);
  • 37. frame.add(bt, BorderLayout.NORTH); frame.add(bt, BorderLayout.SOUTH); frame.add(bt, BorderLayout.EAST); frame.add(bt, BorderLayout.WEST);
  • 38. 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
  • 39. 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.
  • 40. aContainer.setLayout(new GridLayout(2, 3)); O GridLayout divide o container em celulas invisiveis, que serão preenchidas com os componentes.
  • 41. 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);
  • 42. 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);
  • 43. Ok. Estou começando entender os layout, mas agora quero colocar “ações” aquele meu aplicativo.
  • 44. O Java suporta o coneito de eventos, onde os objetos são divididos fontes (sources) e receptores (listenners).
  • 45. 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 …
  • 46. Existem diversos eventos, onde cada componente pode disparar determinados eventos. Veremos melhor sobre eles numa aula futura.
  • 47. No teu caso, você precisa capturar o evento “action” do botão. Para isso precisamos de um objeto receptor para este tipo de evento.
  • 48. Existe uma “interface java” para este receptor, identificada como ActionListener que possui a assinatura do método actionPerformed
  • 49. Este receptor captura o evento e finaliza a aplicação. public class Finaliza implements ActionListener { @Override public void actionPerformed( ActionEvent arg0) { System.exit(1); } }
  • 50. 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.
  • 51. 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
  • 52. ATIVIDADE: Faça o botão “Diga Ola” mostrar a seguinte mensagem “Ola”: JOptionPane.showMessageDialog( null, "Ola !!");
  • 53. Entendido os conceitos basico, vou apresentar agora uma versão melhora para o mesmo aplicativo.
  • 54. Usualmente, delegamos a um objeto do tipo Frame toda a tarefa de montar sua interface.
  • 55. 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
  • 56. public class SwingOla { public static void main(String[] args) { // TODO Auto-generated method stub PrimeiroSwing j = new PrimeiroSwing(); j.setVisible(true); } } Classe teste
  • 57. Esta aula foi apenas uma apresentação ampla sobre como o Swing funciona.
  • 58. Entendido como ele funciona, temos que ler e consultar referencias sobre os controles e eventos.
  • 59. Atividade: Construa a mesma aplicação, só que usando os recursos do Netbeans. Iremos usá-lo para construir nossas interfaces daqui para frente.
  • 60. Desenvolva sua própria calculadora de IMC
  • 61. 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,78 IMC = 21,5
  • 62. Atividade: A interface pode ser baseada no seguinte aplicativo: