SlideShare a Scribd company logo
1 of 46
Download to read offline
Noções de Design Gráfico


Unidade IV – Estudo aplicado em
    ambientes heterogêneos



                          Prof. Nécio de Lima Veras
           http://lattes.cnpq.br/8284657916723590
Objetivo

   Realizar estudo prático de produção de
interfaces em ambientes heterogêneos (web,
  desktop e móvel) usando ferramentas de
                   autoria.




                               Prof. Nécio de Lima Veras
                http://lattes.cnpq.br/8284657916723590

        Página da disciplina na Web
Interfaces gráficas usando Swing


  Adaptado por: Nécio de Lima Veras
       necio.veras@ifce.edu.br
    Objetivo: revisar os comandos da API Swing

   Créditos: Regis Pires Magalhães – regis@ifpi.edu.br


                                               Prof. Nécio Veras
Leitura recomendada




http://java.sun.com/docs/books/tutorial/ui/feature
                 s/compWin.html




                                    Prof. Nécio Veras
Parte I – Fundamentos do Swing




                       Prof. Nécio Veras
Interfaces gráficas em
                          Java
●   As bibliotecas gráficas oficiais incluídas no
    Java são: AWT e Swing;
●   Outra biblioteca muito usada é o SWT,
    desenvolvida pela IBM e usada no IDE
    Eclipse;
●   A complexidade do Swing deve-se ao máximo
    de portabilidade de busca atingir;
●   A aplicação se comporta da mesma forma,
    independente do sistema operacional em uso;

                                          Prof. Nécio Veras
AWT e Swing

●   AWT (Abstract Window Toolkit)
    –   Provê facilidades para interface de usuário (IU) em Java.
    –   Insuficiente para suportar interfaces de usuário complexas.
●   Swing
    –   Conjunto de componentes de UI muito mais completo, flexível e
        portável do que o provido pela AWT.
    –   Conjunto de componentes gráficos customizáveis cuja aparência
        (look-and-feel - L&F) pode ser alterada em tempo de execução.
    –   Não substitui a AWT.
    –   Construído no topo das classes que compõem o núcleo das
        bibliotecas AWT.



                                                             Prof. Nécio Veras
Exemplo

import javax.swing.JOptionPane;

public class FSimples {

    public static void main(String[] args) {
      JOptionPane.showMessageDialog(null, "Oi");
    }

}




                                    Prof. Nécio Veras
Aparência - Look & Feel

●   Identificando a aparência usada...

    import javax.swing.JOptionPane;
    import javax.swing.UIManager;

    public class FSimples {

        public static void main(String[] args) {
          JOptionPane.showMessageDialog(null, UIManager.getLookAndFeel());
        }

    }




                                                         Prof. Nécio Veras
Aparência - Look & Feel

●   Mudando a aparência...
     import javax.swing.JOptionPane;
     import javax.swing.UIManager;

     public class FSimples {

         public static void main(String[] args) {
           JOptionPane.showMessageDialog(null,
               "Aparência Padrão: " + UIManager.getLookAndFeel());

             try {

     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
         } catch (Exception e) {
           e.printStackTrace();
         }

             JOptionPane.showMessageDialog(null,
                 "Aparência do Sistema: " + UIManager.getLookAndFeel());
         }

     }                                                       Prof. Nécio Veras
Aparência - Look & Feel

●   Algumas aparências possíveis:
    –   UIManager.getCrossPlatformLookAndFeelClassName()
        ●   Funciona em todas as plataformas (Java L&F)
        ●   Java Look and Feel
             –   “javax.swing.plaf.metal.MetalLookAndFeel”
    –   UIManager.getSystemLookAndFeelClassName()
        ●   Aparência para a plataforma em uso
        ●   No Linux: GTK look and feel
             –   “com.sun.java.swing.plaf.gtk.GTKLookAndFeel”
        ●   No Windows: Windows look and feel
             –   "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
    –   Outras aparências podem ser instaladas.


                                                                        Prof. Nécio Veras
Componentes AWT

●   Component
●   Container
●   Panel
●   Window
●   Dialog
●   Frame
●   Graphics
●   Outros:
                           Prof. Nécio Veras
Exemplo

import java.awt.*;

public class FrameDemo {
  public static void main(String args[]) {
    Frame f = new Frame();
    f.setSize(100, 100);
    f.setVisible(true);
  }
}




                               Prof. Nécio Veras
Exemplo
import java.awt.*;

public class PanelDemo extends Panel {
  public PanelDemo() {
    this.setBackground(Color.black);
  }

    public void paint(Graphics g) {
      g.setColor(new Color(0, 255, 0)); // verde
      g.setFont(new Font("Helvetica", Font.PLAIN, 16));
      g.drawString("Hello GUI World!", 30, 100);
      g.setColor(new Color(1.0f, 0, 0)); // vermelho
      g.fillRect(30, 100, 150, 10);
    }

    public static void main(String args[]) {
      Frame f = new Frame("Testing Graphics Panel");
      PanelDemo painel = new PanelDemo();
      f.add(painel);
      f.setSize(600, 300);
      f.setVisible(true);
    }
}

                                                          Prof. Nécio Veras
Exemplo
import java.awt.*;
import javax.swing.*;

public class JDesenho extends JPanel{
    protected void paintComponent(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, 500, 500);
        g.setColor(Color.darkGray);
        g.fillOval(150, 200, 200, 40);
        g.setColor(Color.red);
        g.fillOval(100, 80, 150, 150);
        g.setColor(Color.pink);
        g.fillOval(120, 105, 30, 30);
        g.setColor(Color.blue);
        g.setFont(new Font("Arial Bold", Font.PLAIN,
36));
        g.drawString("Java Swing", 30, 50);
    }

    public static void main(String args[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JDesenho());
        f.setSize(400, 300);
        f.setVisible(true);
    }
}
                                                            Prof. Nécio Veras
Componentes Swing

●   Containers de alto nível (top-level):
    –   JFrame
    –   JApplet
    –   JDialog




                                            Prof. Nécio Veras
Componentes Swing
●
    JComponent
    –   Classe raiz para todos os componentes Swing, excluindo containers de
        alto-nível.
●
    JTextField
    –   Permite a edição de uma única linha de texto.
●
    JOptionPane
    –   Fornece uma maneira fácil de exibir caixas de diálogo pop-up.
●   JFileChooser
    –   Permite ao usuário que selecione um arquivo.
●   JColorChooser
    –   Permite ao usuário selecionar uma cor.



                                                                Prof. Nécio Veras
Componentes Swing
●   Botão – JButton
    –   Criação de botões com ícones
         ●   ImageIcon
    –   Uso de mnemonic
    –   Habilitação e desabilitação
    –   Uso de ações
    –   Registro de action listener
    –   Configuração de tooltip
    –   Texto de botões em HTML




                                        Prof. Nécio Veras
Componentes Swing

●   Caixa de Seleção - JCheckBox
    –   Uso de mnemonic
    –   Marcar e desmarcar
    –   Registro de action listener
        ●   Modificação de estado




                                      Prof. Nécio Veras
Componentes Swing

●   Botão de Opção - JRadioButton
    –   Uso de mnemonic
    –   Usado em conjunto com Grupo de Botões –
        ButtonGroup – para que apenas um item possa
        ser selecionado.
    –   Registro de action listener
        ●   Modificação de opção




                                            Prof. Nécio Veras
Componentes Swing

●   Painel com Abas - JTabbedPane
    –   Adição de abas / guias
    –   Modificação de aba selecionada




                                         Prof. Nécio Veras
Componentes Swing

●   Divisão de Painel - JSplitPane
    –   Usado para dividir dois componentes que podem ser
        redimensionados interativamente pelo usuário.
    –   Configuração geral e orientação do split
    –   Posicionamento do divisor
    –   Restrição de tamanho
        do divisor
    –   SplitPane aninhados



                                                   Prof. Nécio Veras
Componentes Swing

●   Tabela - JTable
    –   Cria uma tabela para apresentar dados tabulares
        ●   Muito utilizado para mostrar tabelas detalhe de tabelas
            mestre
             –   Lado N de relacionamento 1:N
    –   Pode utilizar diversos modelos de dados




                                                      Prof. Nécio Veras
Componentes Swing

●   Tabela - JTable
    –   Alta flexibilidade para definir a aparência da tabela




                                                Prof. Nécio Veras
Exemplo
import java.awt.FlowLayout;
import javax.swing.*;

public class FTeste {

    public static void main(String[] args) {
      JFrame janela = new JFrame("Simples");
      janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      janela.setLayout(new FlowLayout());

        JLabel rotulo = new JLabel();
        rotulo.setText("Java Swing");
        janela.add(rotulo);

        JButton botao = new JButton();
        botao.setText("Botão Inútil");
        janela.add(botao);

        janela.pack();
        janela.setVisible(true);
    }

}                                                Prof. Nécio Veras
Experiências e Exercícios

●   O que acontece de diferente se as linhas a seguir
    não estiverem no código?
    ●   janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ●   janela.setLayout(new FlowLayout());
    ●   janela.pack();

●   Para que elas servem?


●   Exercício:
        –   Faça um formulário de cadastro qualquer usando
            componentes básicos vistos anteriormente, tais como:
            jLabel, jButton, jTextField, jCheckBox, jRadioButton e
            jTable, por exemplo.                       Prof. Nécio Veras
Parte II – Trabalhando com controle
   de Layouts e tratamentos de
               Eventos




                            Prof. Nécio de Lima Veras
             http://lattes.cnpq.br/8284657916723590
Gerenciadores de Layout –
                Layout Managers
●   Determinam a disposição e o tamanho dos
    componentes no contêiner.




                                     Prof. Nécio Veras
Gerenciadores de Layout –
                      Layout Managers
●   BorderLayout
    –   Layout default para objetos Window e suas
        subclasses.
    –   Posiciona os componentes em 5 áreas
        ●   Norte, sul, leste, oeste e centro




                                                Prof. Nécio Veras
Exemplo

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class BorderLayoutDemo {
   public static void main(String args[]) {
      JFrame frm = new JFrame();
      frm.setLayout(new BorderLayout(10, 10));
      frm.add(new JButton("NORTH"), BorderLayout.NORTH);
      frm.add(new JButton("SOUTH"), BorderLayout.SOUTH);
      frm.add(new JButton("EAST"), BorderLayout.EAST);
      frm.add(new JButton("WEST"), BorderLayout.WEST);
      frm.add(new JButton("CENTER"), BorderLayout.CENTER);
      frm.setSize(200, 200);
      frm.setVisible(true);
   }
}

                                                     Prof. Nécio Veras
Gerenciadores de Layout –
                   Layout Managers
●   FlowLayout
    –   Gerenciador padrão para Panel e suas
        subclasses.
    –   Posiciona os componentes da esquerda para a
        direita e de cima para baixo, começando no canto
        superior esquerdo.




                                               Prof. Nécio Veras
Exemplo


import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowLayoutDemo {
  public static void main(String args[]) {
    JFrame frm = new JFrame();
    frm.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));
    frm.add(new JButton("ONE"));
    frm.add(new JButton("TWO"));
    frm.add(new JButton("THREE"));
    frm.setSize(180, 120);
    frm.setVisible(true);
  }
}


                                                    Prof. Nécio Veras
Gerenciadores de Layout –
                      Layout Managers
●   BoxLayout
    –   Permite posicionar elementos de forma linear
        ●   De cima para baixo
        ●   Da esquerda para a direita




                                             Prof. Nécio Veras
Gerenciadores de Layout –
                   Layout Managers
●   GridLayout
    –   Dispõe os componentes em um grid de linhas e
        colunas.
    –   Cada componente ocupa o espaço exato de uma
        célula.
    –   Posiciona os componentes da esquerda para a
        direita e de cima para baixo.




                                           Prof. Nécio Veras
Exemplo

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GridLayoutDemo {
  public static void main(String args[]) {
    JFrame frm = new JFrame();
    frm.setLayout(new GridLayout(2, 3, 4, 4));
    frm.add(new JButton("ONE"));
    frm.add(new JButton("TWO"));
    frm.add(new JButton("THREE"));
    frm.add(new JButton("FOUR"));
    frm.add(new JButton("FIVE"));
    frm.setSize(200, 200);
    frm.setVisible(true);
  }
}
                                           Prof. Nécio Veras
Gerenciadores de Layout –
                     Layout Managers
●   GridBagLayout
    –   Layout mais flexível e mais complexo do Swing
    –   Dispõe os componentes em um grid de linhas e
        colunas
        ●   Componentes podem se estender a várias linhas ou
            colunas




                                                  Prof. Nécio Veras
Gerenciadores de Layout –
                      Layout Managers
●   GroupLayout
    –   Nativo no Swing a partir do Java 6.
    –   Agrupa componentes hierarquicamente para
        posicioná-los em um contêiner.
    –   Foi projetado especialmente para uso em
        construtores de tela, mas pode ser codificado
        manualmente.
    –   Suporta 2 tipos de agrupamentos:
        ●   Sequencial – elementos são posicionados
            sequencialmente, um após o outro.
        ●   Paralelo – Alinha os elementos em 1 de 4 maneiras
            possíveis.                               Prof. Nécio Veras
Gerenciadores de Layout –
                          Layout Managers
●   O GroupLayout permite:
    –   Alinhar componentes horizontal e verticalmente;
    –   Inserir componentes inteligentemente;
    –   Alinhar a margem dos componentes;
    –   Esticar os componentes para esquerda, direita ou ambos;
    –   Esticar os componentes para o alto, baixo ou ambos;
    –   Definir o alinhamento, tamanho e espaçamento.




                                                                  Prof. Nécio Veras
Eventos




          Prof. Nécio Veras
Eventos
●   Implementação de manipuladores de eventos
    –   Declaração de classe que implementa a interface para
        tratamento de eventos do tipo requerido.
    –   Código que implementa os métodos definidos na interface
        listener.
    –   Registro de instâncias de classe manipuladoras de eventos
        como ouvintes para o evento do componente desejado.
         ●   Adição de ouvintes através de métodos como:
              –   addActionListener
              –   addWindowListener




                                                           Prof. Nécio Veras
Eventos

●   Exemplos de Ouvintes usados no Swing:
    –   ActionListener
        ●   Cliques em botões, Enter em campos, cliques em
            menus
    –   WindowListener
        ●   Manipulação de frames
    –   MouseListener e MouseMotionListener
        ●   Pressionamento de botão do mouse sobre
            componentes
        ●   Movimentação do mouse sobre componentes

                                                   Prof. Nécio Veras
Implementando Ouvinte



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

public class MeuOuvinte implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    JOptionPane.showMessageDialog(null, "Ação!!!");
  }
}




                                          Prof. Nécio Veras
Registrando um Ouvinte
import java.awt.FlowLayout;
import javax.swing.*;

public class FTeste {
  public static void main(String[] args) {
    JFrame janela = new JFrame("Simples");
    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    janela.setLayout(new FlowLayout());

        JLabel rotulo = new JLabel();
        rotulo.setText("Java Swing");
        janela.add(rotulo);

        JButton botao = new JButton();
        botao.setText("Botão Útil");
        botao.addActionListener(new MeuOuvinte());
        janela.add(botao);
        janela.pack();
        janela.setVisible(true);
    }
}




                                                Prof. Nécio Veras
Registrando e Implementando
           Ouvinte através de uma classe
                  interna estática
import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.*;

public class FTeste {
  public static void main(String[] args) {
    final JFrame janela = new JFrame("Simples");
    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    janela.setLayout(new FlowLayout());

        JLabel rotulo = new JLabel();
        rotulo.setText("Java Swing");
        janela.add(rotulo);

        JButton botao = new JButton();
        botao.setText("Botão Útil");


        botao.addActionListener(new MeuOuvinte());
        janela.add(botao);

        janela.pack();
        janela.setVisible(true);
    }

    public static class MeuOuvinte implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          JOptionPane.showMessageDialog(null, "Ação!!!");
        }
    }
}
                                                                 Prof. Nécio Veras
Registrando e Implementando
              Ouvinte através de uma classe
                     interna anônima
import     java.awt.FlowLayout;
import     java.awt.event.ActionEvent;
import     java.awt.event.ActionListener;
import     javax.swing.*;

public class FTeste {
  public static void main(String[] args) {
    final JFrame janela = new JFrame("Simples");
    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    janela.setLayout(new FlowLayout());

        JLabel rotulo = new JLabel();
        rotulo.setText("Java Swing");
        janela.add(rotulo);

        JButton botao = new JButton();
        botao.setText("Botão Útil");

        botao.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(janela, "Ação!!!");
          }
        });
        janela.add(botao);

        janela.pack();
        janela.setVisible(true);
    }
}
                                                                Prof. Nécio Veras
Exercício
● Construa uma calculadora simples baseada na interface gráfica abaixo.
● Os resultados devem estar desabilitados.


● Deve haver teclas de atalho para acessar as caixas de texto e os botões.


● Deve haver dicas para explicar as caixas de texto e botões.


●
    Os números só devem ser aceitos se forem válidos.




●   Dica:
    – Botão padrão:
      ●   this.getRootPane().setDefaultButton(jButtonCalcula);
                                                                  Prof. Nécio Veras

More Related Content

What's hot

Sistema operacional
Sistema operacionalSistema operacional
Sistema operacionalMichael Soto
 
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
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultasjulianaveregue
 
Cascateamento de switch
Cascateamento de switchCascateamento de switch
Cascateamento de switchCarlos Veiga
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1Cristiano Pires Martins
 
Exercícios Resolvidos - Arquitetura e Organização de Computadores
Exercícios Resolvidos - Arquitetura e Organização de ComputadoresExercícios Resolvidos - Arquitetura e Organização de Computadores
Exercícios Resolvidos - Arquitetura e Organização de ComputadoresRonildo Oliveira
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente EncadeadasLeinylson Fontinele
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Projeto final instalação e configuração de redes locais
Projeto final  instalação e configuração de redes locaisProjeto final  instalação e configuração de redes locais
Projeto final instalação e configuração de redes locaisMarcoSoaresGI
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosThiago Poiani
 
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockApresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockWilliams Gomes da Silva
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...Fernando Belome Feltrin
 

What's hot (20)

Sistema operacional
Sistema operacionalSistema operacional
Sistema operacional
 
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)
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Cascateamento de switch
Cascateamento de switchCascateamento de switch
Cascateamento de switch
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
 
Exercícios Resolvidos - Arquitetura e Organização de Computadores
Exercícios Resolvidos - Arquitetura e Organização de ComputadoresExercícios Resolvidos - Arquitetura e Organização de Computadores
Exercícios Resolvidos - Arquitetura e Organização de Computadores
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Projeto final instalação e configuração de redes locais
Projeto final  instalação e configuração de redes locaisProjeto final  instalação e configuração de redes locais
Projeto final instalação e configuração de redes locais
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e Semáforos
 
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockApresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...
300 Exercícios Resolvidos e Comentados em Python - Fernando Feltrin - Amostra...
 

Viewers also liked

Apostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansApostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansGeorge Dantas
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJoão Longo
 
Net beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e AtalhosNet beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e Atalhosandreandrade17
 
Tutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingTutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingEverson Wolf
 
Prática de ensino de Linguagem de Programação II
Prática de ensino de Linguagem de Programação IIPrática de ensino de Linguagem de Programação II
Prática de ensino de Linguagem de Programação IIEverson Wolf
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - ConceitosMayron Cachina
 
Samir Mamude - Sistemas Comerciais Java EE
Samir Mamude - Sistemas Comerciais Java EESamir Mamude - Sistemas Comerciais Java EE
Samir Mamude - Sistemas Comerciais Java EESamir Mamude
 
Criando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansCriando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansSerge Rehem
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 

Viewers also liked (10)

Apostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansApostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeans
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
 
Net beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e AtalhosNet beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e Atalhos
 
Tutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingTutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swing
 
Prática de ensino de Linguagem de Programação II
Prática de ensino de Linguagem de Programação IIPrática de ensino de Linguagem de Programação II
Prática de ensino de Linguagem de Programação II
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 
Apostila: Netbeans
Apostila: NetbeansApostila: Netbeans
Apostila: Netbeans
 
Samir Mamude - Sistemas Comerciais Java EE
Samir Mamude - Sistemas Comerciais Java EESamir Mamude - Sistemas Comerciais Java EE
Samir Mamude - Sistemas Comerciais Java EE
 
Criando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeansCriando uma Agenda simples com NetBeans
Criando uma Agenda simples com NetBeans
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 

Similar to Java swing

Similar to Java swing (20)

Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Interface Gráfica.ppt
Interface Gráfica.pptInterface Gráfica.ppt
Interface Gráfica.ppt
 
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
 
Apostila:Curso de java II
Apostila:Curso de java II  Apostila:Curso de java II
Apostila:Curso de java II
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
JavaFx - Introdução
JavaFx - IntroduçãoJavaFx - Introdução
JavaFx - Introdução
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 
Java Swing
Java SwingJava Swing
Java Swing
 
GUI Aplicações Gráficas
GUI Aplicações Gráficas GUI Aplicações Gráficas
GUI Aplicações Gráficas
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Capitulo 14 -_componentes_gui_parte_1
Capitulo 14 -_componentes_gui_parte_1Capitulo 14 -_componentes_gui_parte_1
Capitulo 14 -_componentes_gui_parte_1
 
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
 
jQuery básico (parte 3)
jQuery básico (parte 3)jQuery básico (parte 3)
jQuery básico (parte 3)
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012
 
Graphics Capabilities of Java Platform
Graphics Capabilities of Java PlatformGraphics Capabilities of Java Platform
Graphics Capabilities of Java Platform
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Java gui
Java guiJava gui
Java gui
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 

More from Nécio de Lima Veras

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Nécio de Lima Veras
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoNécio de Lima Veras
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados Nécio de Lima Veras
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesNécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsNécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesNécio de Lima Veras
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionaisNécio de Lima Veras
 

More from Nécio de Lima Veras (20)

Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
 

Java swing

  • 1. Noções de Design Gráfico Unidade IV – Estudo aplicado em ambientes heterogêneos Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 2. Objetivo Realizar estudo prático de produção de interfaces em ambientes heterogêneos (web, desktop e móvel) usando ferramentas de autoria. Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590 Página da disciplina na Web
  • 3. Interfaces gráficas usando Swing Adaptado por: Nécio de Lima Veras necio.veras@ifce.edu.br Objetivo: revisar os comandos da API Swing Créditos: Regis Pires Magalhães – regis@ifpi.edu.br Prof. Nécio Veras
  • 5. Parte I – Fundamentos do Swing Prof. Nécio Veras
  • 6. Interfaces gráficas em Java ● As bibliotecas gráficas oficiais incluídas no Java são: AWT e Swing; ● Outra biblioteca muito usada é o SWT, desenvolvida pela IBM e usada no IDE Eclipse; ● A complexidade do Swing deve-se ao máximo de portabilidade de busca atingir; ● A aplicação se comporta da mesma forma, independente do sistema operacional em uso; Prof. Nécio Veras
  • 7. AWT e Swing ● AWT (Abstract Window Toolkit) – Provê facilidades para interface de usuário (IU) em Java. – Insuficiente para suportar interfaces de usuário complexas. ● Swing – Conjunto de componentes de UI muito mais completo, flexível e portável do que o provido pela AWT. – Conjunto de componentes gráficos customizáveis cuja aparência (look-and-feel - L&F) pode ser alterada em tempo de execução. – Não substitui a AWT. – Construído no topo das classes que compõem o núcleo das bibliotecas AWT. Prof. Nécio Veras
  • 8. Exemplo import javax.swing.JOptionPane; public class FSimples { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Oi"); } } Prof. Nécio Veras
  • 9. Aparência - Look & Feel ● Identificando a aparência usada... import javax.swing.JOptionPane; import javax.swing.UIManager; public class FSimples { public static void main(String[] args) { JOptionPane.showMessageDialog(null, UIManager.getLookAndFeel()); } } Prof. Nécio Veras
  • 10. Aparência - Look & Feel ● Mudando a aparência... import javax.swing.JOptionPane; import javax.swing.UIManager; public class FSimples { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Aparência Padrão: " + UIManager.getLookAndFeel()); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } JOptionPane.showMessageDialog(null, "Aparência do Sistema: " + UIManager.getLookAndFeel()); } } Prof. Nécio Veras
  • 11. Aparência - Look & Feel ● Algumas aparências possíveis: – UIManager.getCrossPlatformLookAndFeelClassName() ● Funciona em todas as plataformas (Java L&F) ● Java Look and Feel – “javax.swing.plaf.metal.MetalLookAndFeel” – UIManager.getSystemLookAndFeelClassName() ● Aparência para a plataforma em uso ● No Linux: GTK look and feel – “com.sun.java.swing.plaf.gtk.GTKLookAndFeel” ● No Windows: Windows look and feel – "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" – Outras aparências podem ser instaladas. Prof. Nécio Veras
  • 12. Componentes AWT ● Component ● Container ● Panel ● Window ● Dialog ● Frame ● Graphics ● Outros: Prof. Nécio Veras
  • 13. Exemplo import java.awt.*; public class FrameDemo { public static void main(String args[]) { Frame f = new Frame(); f.setSize(100, 100); f.setVisible(true); } } Prof. Nécio Veras
  • 14. Exemplo import java.awt.*; public class PanelDemo extends Panel { public PanelDemo() { this.setBackground(Color.black); } public void paint(Graphics g) { g.setColor(new Color(0, 255, 0)); // verde g.setFont(new Font("Helvetica", Font.PLAIN, 16)); g.drawString("Hello GUI World!", 30, 100); g.setColor(new Color(1.0f, 0, 0)); // vermelho g.fillRect(30, 100, 150, 10); } public static void main(String args[]) { Frame f = new Frame("Testing Graphics Panel"); PanelDemo painel = new PanelDemo(); f.add(painel); f.setSize(600, 300); f.setVisible(true); } } Prof. Nécio Veras
  • 15. Exemplo import java.awt.*; import javax.swing.*; public class JDesenho extends JPanel{ protected void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, 500, 500); g.setColor(Color.darkGray); g.fillOval(150, 200, 200, 40); g.setColor(Color.red); g.fillOval(100, 80, 150, 150); g.setColor(Color.pink); g.fillOval(120, 105, 30, 30); g.setColor(Color.blue); g.setFont(new Font("Arial Bold", Font.PLAIN, 36)); g.drawString("Java Swing", 30, 50); } public static void main(String args[]) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new JDesenho()); f.setSize(400, 300); f.setVisible(true); } } Prof. Nécio Veras
  • 16. Componentes Swing ● Containers de alto nível (top-level): – JFrame – JApplet – JDialog Prof. Nécio Veras
  • 17. Componentes Swing ● JComponent – Classe raiz para todos os componentes Swing, excluindo containers de alto-nível. ● JTextField – Permite a edição de uma única linha de texto. ● JOptionPane – Fornece uma maneira fácil de exibir caixas de diálogo pop-up. ● JFileChooser – Permite ao usuário que selecione um arquivo. ● JColorChooser – Permite ao usuário selecionar uma cor. Prof. Nécio Veras
  • 18. Componentes Swing ● Botão – JButton – Criação de botões com ícones ● ImageIcon – Uso de mnemonic – Habilitação e desabilitação – Uso de ações – Registro de action listener – Configuração de tooltip – Texto de botões em HTML Prof. Nécio Veras
  • 19. Componentes Swing ● Caixa de Seleção - JCheckBox – Uso de mnemonic – Marcar e desmarcar – Registro de action listener ● Modificação de estado Prof. Nécio Veras
  • 20. Componentes Swing ● Botão de Opção - JRadioButton – Uso de mnemonic – Usado em conjunto com Grupo de Botões – ButtonGroup – para que apenas um item possa ser selecionado. – Registro de action listener ● Modificação de opção Prof. Nécio Veras
  • 21. Componentes Swing ● Painel com Abas - JTabbedPane – Adição de abas / guias – Modificação de aba selecionada Prof. Nécio Veras
  • 22. Componentes Swing ● Divisão de Painel - JSplitPane – Usado para dividir dois componentes que podem ser redimensionados interativamente pelo usuário. – Configuração geral e orientação do split – Posicionamento do divisor – Restrição de tamanho do divisor – SplitPane aninhados Prof. Nécio Veras
  • 23. Componentes Swing ● Tabela - JTable – Cria uma tabela para apresentar dados tabulares ● Muito utilizado para mostrar tabelas detalhe de tabelas mestre – Lado N de relacionamento 1:N – Pode utilizar diversos modelos de dados Prof. Nécio Veras
  • 24. Componentes Swing ● Tabela - JTable – Alta flexibilidade para definir a aparência da tabela Prof. Nécio Veras
  • 25. Exemplo import java.awt.FlowLayout; import javax.swing.*; public class FTeste { public static void main(String[] args) { JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout()); JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo); JButton botao = new JButton(); botao.setText("Botão Inútil"); janela.add(botao); janela.pack(); janela.setVisible(true); } } Prof. Nécio Veras
  • 26. Experiências e Exercícios ● O que acontece de diferente se as linhas a seguir não estiverem no código? ● janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ● janela.setLayout(new FlowLayout()); ● janela.pack(); ● Para que elas servem? ● Exercício: – Faça um formulário de cadastro qualquer usando componentes básicos vistos anteriormente, tais como: jLabel, jButton, jTextField, jCheckBox, jRadioButton e jTable, por exemplo. Prof. Nécio Veras
  • 27. Parte II – Trabalhando com controle de Layouts e tratamentos de Eventos Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 28. Gerenciadores de Layout – Layout Managers ● Determinam a disposição e o tamanho dos componentes no contêiner. Prof. Nécio Veras
  • 29. Gerenciadores de Layout – Layout Managers ● BorderLayout – Layout default para objetos Window e suas subclasses. – Posiciona os componentes em 5 áreas ● Norte, sul, leste, oeste e centro Prof. Nécio Veras
  • 30. Exemplo import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new BorderLayout(10, 10)); frm.add(new JButton("NORTH"), BorderLayout.NORTH); frm.add(new JButton("SOUTH"), BorderLayout.SOUTH); frm.add(new JButton("EAST"), BorderLayout.EAST); frm.add(new JButton("WEST"), BorderLayout.WEST); frm.add(new JButton("CENTER"), BorderLayout.CENTER); frm.setSize(200, 200); frm.setVisible(true); } } Prof. Nécio Veras
  • 31. Gerenciadores de Layout – Layout Managers ● FlowLayout – Gerenciador padrão para Panel e suas subclasses. – Posiciona os componentes da esquerda para a direita e de cima para baixo, começando no canto superior esquerdo. Prof. Nécio Veras
  • 32. Exemplo import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class FlowLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); frm.add(new JButton("ONE")); frm.add(new JButton("TWO")); frm.add(new JButton("THREE")); frm.setSize(180, 120); frm.setVisible(true); } } Prof. Nécio Veras
  • 33. Gerenciadores de Layout – Layout Managers ● BoxLayout – Permite posicionar elementos de forma linear ● De cima para baixo ● Da esquerda para a direita Prof. Nécio Veras
  • 34. Gerenciadores de Layout – Layout Managers ● GridLayout – Dispõe os componentes em um grid de linhas e colunas. – Cada componente ocupa o espaço exato de uma célula. – Posiciona os componentes da esquerda para a direita e de cima para baixo. Prof. Nécio Veras
  • 35. Exemplo import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class GridLayoutDemo { public static void main(String args[]) { JFrame frm = new JFrame(); frm.setLayout(new GridLayout(2, 3, 4, 4)); frm.add(new JButton("ONE")); frm.add(new JButton("TWO")); frm.add(new JButton("THREE")); frm.add(new JButton("FOUR")); frm.add(new JButton("FIVE")); frm.setSize(200, 200); frm.setVisible(true); } } Prof. Nécio Veras
  • 36. Gerenciadores de Layout – Layout Managers ● GridBagLayout – Layout mais flexível e mais complexo do Swing – Dispõe os componentes em um grid de linhas e colunas ● Componentes podem se estender a várias linhas ou colunas Prof. Nécio Veras
  • 37. Gerenciadores de Layout – Layout Managers ● GroupLayout – Nativo no Swing a partir do Java 6. – Agrupa componentes hierarquicamente para posicioná-los em um contêiner. – Foi projetado especialmente para uso em construtores de tela, mas pode ser codificado manualmente. – Suporta 2 tipos de agrupamentos: ● Sequencial – elementos são posicionados sequencialmente, um após o outro. ● Paralelo – Alinha os elementos em 1 de 4 maneiras possíveis. Prof. Nécio Veras
  • 38. Gerenciadores de Layout – Layout Managers ● O GroupLayout permite: – Alinhar componentes horizontal e verticalmente; – Inserir componentes inteligentemente; – Alinhar a margem dos componentes; – Esticar os componentes para esquerda, direita ou ambos; – Esticar os componentes para o alto, baixo ou ambos; – Definir o alinhamento, tamanho e espaçamento. Prof. Nécio Veras
  • 39. Eventos Prof. Nécio Veras
  • 40. Eventos ● Implementação de manipuladores de eventos – Declaração de classe que implementa a interface para tratamento de eventos do tipo requerido. – Código que implementa os métodos definidos na interface listener. – Registro de instâncias de classe manipuladoras de eventos como ouvintes para o evento do componente desejado. ● Adição de ouvintes através de métodos como: – addActionListener – addWindowListener Prof. Nécio Veras
  • 41. Eventos ● Exemplos de Ouvintes usados no Swing: – ActionListener ● Cliques em botões, Enter em campos, cliques em menus – WindowListener ● Manipulação de frames – MouseListener e MouseMotionListener ● Pressionamento de botão do mouse sobre componentes ● Movimentação do mouse sobre componentes Prof. Nécio Veras
  • 42. Implementando Ouvinte import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; public class MeuOuvinte implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Ação!!!"); } } Prof. Nécio Veras
  • 43. Registrando um Ouvinte import java.awt.FlowLayout; import javax.swing.*; public class FTeste { public static void main(String[] args) { JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout()); JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo); JButton botao = new JButton(); botao.setText("Botão Útil"); botao.addActionListener(new MeuOuvinte()); janela.add(botao); janela.pack(); janela.setVisible(true); } } Prof. Nécio Veras
  • 44. Registrando e Implementando Ouvinte através de uma classe interna estática import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.*; public class FTeste { public static void main(String[] args) { final JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout()); JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo); JButton botao = new JButton(); botao.setText("Botão Útil"); botao.addActionListener(new MeuOuvinte()); janela.add(botao); janela.pack(); janela.setVisible(true); } public static class MeuOuvinte implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Ação!!!"); } } } Prof. Nécio Veras
  • 45. Registrando e Implementando Ouvinte através de uma classe interna anônima import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class FTeste { public static void main(String[] args) { final JFrame janela = new JFrame("Simples"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new FlowLayout()); JLabel rotulo = new JLabel(); rotulo.setText("Java Swing"); janela.add(rotulo); JButton botao = new JButton(); botao.setText("Botão Útil"); botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(janela, "Ação!!!"); } }); janela.add(botao); janela.pack(); janela.setVisible(true); } } Prof. Nécio Veras
  • 46. Exercício ● Construa uma calculadora simples baseada na interface gráfica abaixo. ● Os resultados devem estar desabilitados. ● Deve haver teclas de atalho para acessar as caixas de texto e os botões. ● Deve haver dicas para explicar as caixas de texto e botões. ● Os números só devem ser aceitos se forem válidos. ● Dica: – Botão padrão: ● this.getRootPane().setDefaultButton(jButtonCalcula); Prof. Nécio Veras