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:

Introdução ao Java Swing (Interface)

  • 1.
  • 2.
    Sobre mim Sérgio SouzaCosta 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 - interfacesgráficas Elas são compostas por elementos como: janelas
  • 4.
    Introdução - interfacesgráficas Elas são compostas por elementos como: janelas, botões
  • 5.
    Introdução - interfacesgráficas Elas são compostas por elementos como: janelas, botões, caixa de combinação
  • 6.
    Introdução - interfacesgráficas Elas são compostas por elementos como: janelas, botões, caixa de combinação, botão de opção
  • 7.
    Introdução - interfacesgrá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 - interfacesgrá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 - interfacesgrá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 - interfacesgrá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”)
  • 16.
  • 17.
  • 18.
    Mas o importanteagora é conhecer os componentes Swing.
  • 19.
    Qual é ocomponente mais importante entre citados ?
  • 20.
    A Janela, cadaaplicativo 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 instanciaum objeto do tipo Jframe. Certo ? public class SwingOla { public static void main(String[] args) { JFrame frame = new JFrame (); } }
  • 23.
    Nada apareceu public classSwingOla { public static void main(String[] args) { JFrame frame = new JFrame (); } }
  • 24.
    Ah … ajanela 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 daJanela é 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 possodefinir 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çãonao 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, minhaJanela 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 adicionaralgum 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, precisasaber como ele vai organizar todos os componente que você adiciona.
  • 34.
    Ele possui politicasde layout, o padrão é o “border layout”, centralizado.
  • 35.
    Ele divide aJanela, como abaixo. Quando adiciona um novo objeto, ele vai ser adicionado ao centro.
  • 36.
    Estas linhas sãoentã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)); OGridLayout 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 componenteJpanel (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 entenderos layout, mas agora quero colocar “ações” aquele meu aplicativo.
  • 44.
    O Java suportao 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 “interfacejava” para este receptor, identificada como ActionListener que possui a assinatura do método actionPerformed
  • 49.
    Este receptor capturao 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 obotão “Diga Ola” mostrar a seguinte mensagem “Ola”: JOptionPane.showMessageDialog( null, "Ola !!");
  • 53.
    Entendido os conceitosbasico, vou apresentar agora uma versão melhora para o mesmo aplicativo.
  • 54.
    Usualmente, delegamos aum objeto do tipo Frame toda a tarefa de montar sua interface.
  • 55.
    public class PrimeiroSwingextends 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 foiapenas uma apresentação ampla sobre como o Swing funciona.
  • 58.
    Entendido como elefunciona, temos que ler e consultar referencias sobre os controles e eventos.
  • 59.
    Atividade: Construa amesma aplicação, só que usando os recursos do Netbeans. Iremos usá-lo para construir nossas interfaces daqui para frente.
  • 60.
    Desenvolva sua própriacalculadora de IMC
  • 61.
    Atividade: Desenvolva suapró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 interfacepode ser baseada no seguinte aplicativo: