INTERFACES GRÁFICAS
SWING – PARTE 1
Prof.ª M.ª Elaine Cecília Gatto
INTRODUÇÃO
INTRODUÇÃO
• SWING:
• Coleção de classes e interfaces
• Rico conjunto de componentes visuais:
• Botões de ação
• Campos de texto
• Barras de rolagem
• Caixas de seleção
• Árvores
• Tabelas
• Menus
INTRODUÇÃO
• Evento
• É um recurso Java
• É o mecanismo pelo qual o programa é notificado sobre
iterações do usuário
• AWT
• Abstract Window Toolkit
• Sistema de interface gráfica original do Java
• Dependente de plataforma
INTRODUÇÃO
• AWT
• Componentes pesados
• Interface gráfica usável, porém limitada
• Problemas com o uso de janelas nativas específicas da
plataforma (ou pares nativos):
• Um componente pode aparecer e agir de forma
diferente em cada sistema operacional que executar;
• Aparência fixa sem possibilidade de alteração;
• Componentes pesados são sempre opacos;
• etc.;
INTRODUÇÃO
• SWING
• 1997
• Java Foundation Classes = JFC
• Java 1.1: biblioteca separada
• Java 1.2: integrado à biblioteca
• Recursos chave:
• Componentes leves
• Aparência adaptável
INTRODUÇÃO
• SWING
• Componentes leves:
• O componente é escrito em Java
• Usa a janela fornecida por um predecessor pesado
• Não tem um par nativo
• Eficientes e Flexíveis
• Formas geométricas diversas
• Componentes leves são transformados em pares
específicos da plataforma, mas a aparência é
determinada pelo swing
INTRODUÇÃO
• SWING
• Cada componente swing é gerado por código Java e não
por pares específicos de plataforma
• Aparência e lógica são separadas
• Aparência:
• Permite alterar a maneira como o componente é
gerado sem afetar outros aspectos
• Conecta uma nova aparência a qualquer componente
sem criar efeitos colaterais no código
• Metal e Motif
INTRODUÇÃO
• SWING
• Aparência Metal:
• Disponível para todos
• Independente de plataforma
• Aparência padrão
• MVC:
• Model-View-Control
• Arquitetura de componentes clássica
• Permite a aparência adaptável
INTRODUÇÃO
• SWING
• MVC:
• Model: informações de estado associadas ao
componente
• View: determina como o componente será exibido na tela
• Control: determina como o componente reagirá ao
usuário
• Exemplo: quando alguém clicar em uma caixa de
seleção, o CONTROLADOR reagirá alterando o
MODELO para refletir a escolha, resultando na
atualização da VISUALIZAÇÃO
INTRODUÇÃO
• SWING
• Arquitetura modelo-delegação de UI:
• Arquitetura modelo separável
• Swing usa MVC mas não a versão clássica
• Swing usa uma versão modificada de MVC que
combina view e control na mesma entidade lógica
(delegação UI)
• Swing é fácil de usar e NÃO substitui o AWT
• AWT ainda faz parte do JAVA e SWING se baseia nele
COMPONENTES E
CONTEINERES
COMPONENTES E CONTEINERES
• Dois importantes itens
• Todos os contêineres também são componentes
• Componentes:
• É um controle visual independente
• Botão de ação, controle deslizante, etc.
• Contêineres:
• Contém um grupo de componentes
• Tipo especial de componente
• Projetado para conter outros componentes
COMPONENTES E CONTEINERES
• Toda interface gráfica terá pelo menos UM CONTEINER
• Contêineres podem conter outros contêineres
• Hierarquia de contenção: Deve haver um contêiner de nível
superior
COMPONENTES E CONTEINERES
• Componentes:
• Componentes swing derivam de Jcomponent
• JComponent:
• Fornece funcionalidade comum a todos os
componentes
• Herda as classes Container e Component de AWT
• Pacote: javax.swing (representação dos
componentes)
• Um componente Swing se baseia e é compatível com
um componente do AWT
COMPONENTES E CONTEINERES
JApplet JButton JCheckBox JCheckBoxMenuItem
JColoChooser JComboBox JComponent JDesktopPane
JDialog JEditorPane JFileChooser JFormattedTextField
JFrame JInternaFrame JLabel JLayer
JLayeredPane JList JMenu JMenuBar
JMenuItem JOptionPane JPanel JPasswordField
JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem
JRootPane JScrollBar JScrollPane JSeparator
JSlider JSpinner JSplitPane JTabbedPane
JTable JTextArea JTextField JTextPane
JToggleButton JToolBar JToolTip JTree
JViewPort JWindows
COMPONENTES E CONTEINERES
• Contêineres de nível superior:
• JFrame, JApplet, JWindow e JDialog
• Não herdam de JComponent
• Herdam de Component e Container de AWT
• São componentes pesados
• Estão no topo de uma hierarquia de contenção
• Não podem estar contidos em outros contêineres
• JFrame é o mais usado para aplicativos
PAINÉIS DO CONTEINER
PAINÉIS DO CONTEINER
• Cada contêiner de nível superior define um conjunto de
painéis
• JROOTPANE:
• Topo da hierarquia
• Container leve
• Gerencia outros painéis
• Ajuda a gerenciar a barra de menus
• Painel de vidro, painel de conteúdo e painel em
camadas: painéis que compõem o painel raiz
PAINÉIS DO CONTEINER
• Painel de vidro:
• Painel de nível superior
• Fica acima de todos os outros painéis
• Cobre totalmente os outros painéis
• Permite o gerenciamento de eventos do mouse que afetam o
contêiner inteiro ou a geração de algo acima de outro
componente
PAINÉIS DO CONTEINER
• Painel em CAMADAS:
• Permite que os componentes recebam valores de
profundidade
• O valor de profundidade determina como os componentes
são sobrepostos
• Contem o painel de conteúdo e a barra de menus que é
opcional
PAINÉIS DO CONTEINER
• Painel de conteúdo:
• Painel que a sua aplicação interagirá
• É a este painel que serão adicionados componentes
visuais
• Contem os componentes com os quais o usuário interage
• Muito do que acontece com esses painéis é em segundo plano e
não teremos de usar diretamente
GERENCIADORES DE
LAYOUT
GERENCIADORES DE LAYOUT
• Controla a posição dos componentes dentro de um
contêiner
• Determina o local dos controles dentro de um contêiner
• Todos os gerenciadores de layout são instancias de
uma classe que implementa a interface
LAYOUTMANAGER
GERENCIADORES DE LAYOUT
• FlowLayout:
• Layout simples
• Posiciona os componentes da esquerda para a direita e
de cima para baixo
• BorderLayout:
• Layout padrão para um painel de conteúdo
• Posiciona os componentes no centro ou nas bordas do
contêiner
GERENCIADORES DE LAYOUT
• GridLayout:
• Dispõe os componentes dentro de uma grade
• GridBagLayout:
• Dispõe os componentes de tamanhos diferentes dentro
de uma grade flexível
GERENCIADORES DE LAYOUT
• BoxLayout:
• Dispõe os componentes vertical ou horizontalmente
dentro de uma caixa
• SpringLayout:
• Dispõe os componentes de acordo com um conjunto de
restrições
EXEMPLO
EXEMPLO
• JFrame: contêiner de nível superior
• JLabel: componente que cria um rótulo e exibe informação.
É um componente passivo
EXEMPLO
• Programas swing são acionados por eventos
• O evento gerado é passado para o aplicativo com uma chamada
a um tratador de eventos que o aplicativo define
• O tratador é executado na THREAD de despacho do evento
fornecida pelo Swing e não na THREAD principal do aplicativo
• Tratadores de eventos são chamados em uma THREAD que não
foi criada por eles
EXEMPLO
• Duas THREADs diferentes não podem atualizar o mesmo
componente ao mesmo tempo.
• Todos os componentes de GUI devem ser criados e atualizados
a partir da THREAD de despacho do evento E NÃO da THREAD
PRINCIPAL do aplicativo
• MAIN é executado na thread principal e NÃO pode instanciar
diretamente um objeto GUI.
• Main deve criar um objeto RUNNABLE para ser executado na
THREAD de despacho do evento e fazer esse objeto criar a GUI.
EXEMPLO
• Swing Utilities
• Dois métodos para criar thread no despacho de evento
• invokeLater(Runnable objeto): retorna
imediatamente
• invokeAndWait(Runnable objeto): espera até o
objeto.run() retornar
TRATAMENTO DE
EVENTOS
TRATAMENTO DE EVENTOS
• Modelo de delegação de eventos:
• Mecanismo de tratamento de eventos
• Uma fonte gera um evento e o envia para um ou mais
ouvintes
• O ouvinte apenas espera até receber um evento
• Ao receber o evento, o ouvinte processa o evento e
retorna
TRATAMENTO DE EVENTOS
• A lógica que processa eventos fica claramente separada da
lógica da interface de usuário que os gera
• Um elemento da interface de usuário pode DELEGAR o
processamento de um evento para um código separado
• Os ouvintes devem SE registrar em uma fonte para receber
a notificação de um evento
EVENTOS
EVENTOS
• O evento é o objeto que descreve uma mudança de estado
em uma fonte
• Java.ultil.EventObject: super classe de todos os eventos
• Java.awt.evento e javax.swing.event: classes de eventos
FONTES DE EVENTOS
FONTES DE EVENTOS
• É um objeto que gera um evento.
• Quando um evento é gerado, a fonte deve envia-lo para
todos os ouvintes registrados.
• addTipoListener(TipoListener tl): método usado pelos
ouvintes para se registrarem em uma fonte
• Cada tipo de evento tem o seu próprio método de registro.
FONTES DE EVENTOS
• addKeyListener(): método que registra um ouvinte que
recebe eventos de pressionamento de teclas no teclado
• addMouseMotionListener(): método que registra um ouvinte
de movimento do mouse
• Quando ocorre um evento, todos os ouvintes registrados
são notificados.
FONTES DE EVENTOS
• removeTipoListener(TipoListener tl): método fornecido pela
FONTE para que um ouvinte possa cancelar interesse em
um tipo específico de evento
• removeKeyListener(): remove um ouvinte de
pressionamento de teclas
• A fonte que gera os eventos deve fornecer os métodos para
adicionar e remover ouvintes
OUVINTES DE EVENTOS
OUVINTES DE EVENTOS
• Um OUVINTE é um objeto que é notificado quando um
evento ocorre.
• Dois requisitos:
• 1) precisa ter registro em uma ou mais fontes para ser
notificado sobre um tipo de evento
• 2) deve implementar métodos para o recebimento e
processamento desse evento
OUVINTES DE EVENTOS
• Um OUVINTE é um objeto que é notificado quando em
evento ocorre.
• Dois requisitos:
• 1) precisa ter registro em uma ou mais fontes para ser
notificado sobre um tipo de evento
• 2) deve implementar métodos para o recebimento e
processamento desse evento
OUVINTES DE EVENTOS
• Os métodos que recebem e processam eventos são
definidos em um conjunto de interfaces.
• ActionListener:
• Interface que define um método que recebe notificação
quando uma ação ocorre
• Qualquer objeto pode receber e processar esse evento
OUVINTES DE EVENTOS
• Um tratador de eventos deve executar sua tarefa
rapidamente e retornar.
• Quando uma operação demorada é necessária, uma
THREAD separada é criada para esse fim.
• Uma operação longa não deve ser executada por um
tratador de eventos pois isso retardaria a aplicação inteira.
CLASSES DE EVENTOS E
INTERFACES DE
OUVINTES
CLASSES DE OUVINTES
• EventObject:
• superclasse de todos os eventos
• faz parte de java.útil
• AWTEvent:
• subclasse de EventObject.
• superclasse de todos os eventos em AWT
JAVA.AWT.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
ActionEvent Quando uma ação
ocorre dentro de um
controle
ActionListener
Adjustment
Event
Quando uma barra de
rolagem é manipulada
AdjustmentEvent
FocusEvent Quando um
componente ganha ou
perde foco
FocusEvent
JAVA.AWT.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
ItemEvent Quando um item é
selecionado
ItemListener
KeyEvent Quando uma entrada
do teclado é recebida
KeyListener
MouseEvent Arrastar, mover, clicar,
pressionar, soltar.
Quando o mouse
entra ou sai de um
componente
MouseListener e
MouseMotionList
ener
JAVA.AWT.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
Mouse
WhellEvent
Quando a roda do
mouse é movida
Mouse
WhellEvent
WindowEvent Quando um janela é
ativada, fechada,
desativada,
deiconificada,
iconificada, aberta ou
abandonada
WindowListener
JAVA.SWING.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
AncestorEvent Quando o predecessor
de um componente
tiver sido adicionado,
movido ou removido
AncestorListener
ChangeEvent Quando um
componente muda seu
estado
ChangeListener
JAVA.SWING.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
Hyperlink
Event
Quando um hyperlink
é acessado
HyperlinkEvent
ListDataEvent Quando o conteúdo
de uma lista muda
ListDataListener
ListSelection
Event
Quando a seleção em
uma lista muda
ListSelection
Event
MenuEvent Quando ocorre uma
seleção no menu
MenuListener
JAVA.SWING.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
Table
ModelEvent
Quando o modelo
tabela muda
Tabel
ModelEvent
Tree
Expansion
Event
Quando uma árvore é
expandida ou
recolhida
Tree
ExpansionEvent
JAVA.SWING.EVENT
Classe de
Eventos
Geração Ouvinte de
eventos
Tree
ModelEvent
Quando um modelo
de árvore é
expandida ou
recolhida
Tree
ModelListner
Tree
SelectionEvent
Quando um nó de
uma árvore é
selecionado
Tree
SelecionListener
CLASSES
ADAPTADORAS
CLASSES ADAPTADORAS
• Fornecem uma implementação vazia dos métodos das interfaces
de ouvintes de eventos
• São uteis para receber e processar apenas alguns dos eventos
associados a uma interface de eventos específica
• Uma nova classe pode ser definida para agir como um ouvinte
de eventos, estendendo uma das classes adaptadoras e
implementando somente os métodos que forem interessantes
CLASSES ADAPTADORAS
• Isso permite diminuir a quantidade de métodos vazios
desnecessários
• Nem todas as interfaces tem uma classe adaptadora
correspondente
• Normalmente existem classes adaptadoras para aqueles
ouvintes que tem mais de dois métodos
CLASSES ADAPTADORAS
• MouseMotionListener:
• mouseDragged()
• mouseMoved()
• MouseMotionAdapter fornece implementações vazias destes
dois métodos
• Se o interesse estiver apenas na ação de arrastar o mouse,
então:
• Estender MouseMotionAdapter
• Implementar mouseDragged()
CLASSES ADAPTADORAS
Classe adaptadora Implementa
FocusAdapter FocusListener
KeyAdapter KeyListener
MouseAdapter MouseListener
MouseMotionAdapter MouseMotionListener
MouseInputAdapter MouseListener e
MouseMotionListener
WindowsAdapter WindowsListener
JBUTTON
BOTÃO DE AÇÃO
BOTÃO DE AÇÃO
• É um dos controles mais simples e mais usados
• É uma instancia de JBUTTON
• JBUTTON herda a classe abstrata ABSTRACTBUTTON
• ABSTRACTBUTTON define a funcionalidade comum a todos os
botões
• Botões podem conter: texto, imagens ou ambos
BOTÃO DE AÇÃO
• Quando um botão de ação é pressionado, ele gera um
ACTIONEVENT
• addActionListener(ActionListener AL):
• adiciona ouvinte de ação
• AL: objeto que receberá as notificações do evento
• removeActionListener(ActionListener AL):
• remove ouvinte de ação
• AL: objeto que receberá as notificações do evento
BOTÃO DE AÇÃO
• Sintaxe de JBUTTON:
• JButton(String msg)
• msg: texto que será exibido no botão
• Exemplo: JButton jb1 = new JButton(“Botão1");
BOTÃO DE AÇÃO
• ActionListener defie um método:
• actionPerformed(ActionEvent ae)
• Este método sempre é chamado quando um botão é
pressionado. TRATADOR DE EVENTOS
BOTÃO DE AÇÃO
• Comando de ação:
• getActionCommand()
• Identifica qual botão foi pressionado
• Obtém-se o comando de ação chamando este método
BOTÃO DE AÇÃO
• Sempre que um botão é pressionado, ele gera um evento de
ação e todos os ouvintes registrados são notificados com
uma chamada ao método ActionPERFORMED()
• O objeto ACTIONEVENT que representa o evento de botão
é passado como parâmetro. O evento que ocorreu é
passado via ACTIONEVENT
• O comando de ação associado ao botão que gerou o evento
é obtido com uma chamada a GETACTIONCOMMAND()
BOTÃO DE AÇÃO
• Exemplo no netbeans
JTEXTFIELD
CAMPO DE TEXTO
JTEXTFIELD
• Permite que o usuário insira uma linha de texto
• Herda da classe abstrata JTEXTCOMPONENT
• JTEXTCOMPONENT:
• Superclasse de todos os componentes de texto
• Obtém entradas do usuário baseadas em texto
JTEXTFIELD
• Sintaxe
JTextField(int cols)
• Cols:
• largura do campo de texto em colunas
• Tamanho físico do campo de texto na tela
• Uma string maior que o número de colunas pode ser
inserida
JTEXTFIELD
• ActionEvent é gerado quando a tecla ENTER é pressionada:
• addActionListener()
• removeActionListener()
• actionPerformed()
• getText(): obtém a string exibida atualmente no campo de texto
JTEXTFIELD
• JTEXTFIELD também possui uma string de comando de
ação
• O comando de ação é o conteúdo atual do campo de texto
• setActionCommand(String cmd): permite configurar um
comando de ação de acordo com sua necessidade
JTEXTFIELD
• Exemplo: JTextField jt1 = new JTextField(20);
• EXEMPLOS NO NETBEANS (3 e 4)
CLASSES INTERNAS ANONIMAS
• Tratamento de eventos:
• Abordagem simples e direta
• MAIN implementa a interface de ouvinte
• Todos os eventos são enviados para uma instancia
dessa classe
• MAIS FORMAS DE TRATAR EVENTOS
CLASSES INTERNAS ANONIMAS
• Classes de ouvinte separadas:
• Classes diferentes tratariam eventos distintos e ficariam
separadas da MAIN
• Implementar ouvintes com classes internas anônimas
CLASSES INTERNAS ANONIMAS
• CLASSE INTERNA:
• É uma classe não estática declarada dentro de outra
classe
• É uma classe aninhada
• Uma classe interna não existe de forma independente da
classe que a contem
• Uma classe interna tem acesso a todas as variáveis e
métodos de sua classe externa e pode referencia-los
diretamente
CLASSES INTERNAS ANONIMAS
• CLASSE INTERNAANONIMA:
• É uma classe interna que não tem um nome
• A instancia da classe é gerada dinamicamente quando
necessário
• Facilitam a implementação de alguns tratadores de
eventos
• Vantagem: o componente que chama os métodos da
classe já é conhecido
CLASSES INTERNAS ANONIMAS
• CLASSE INTERNAANONIMA:
jb1.addActionListener (
new ActionListener () {
public void actionPerformed(ActionEvent ae){
//tratamento das ações
}
}
);
CLASSES INTERNAS ANONIMAS
• CLASSE INTERNAANONIMA:
jb1.addActionListener (
new ActionListener () {
public void actionPerformed(ActionEvent ae){
//tratamento das ações
}
}
);
Não há necessidade de chamar GETACTIONCOMMAND()
para determinar que componente gerou o evento, porque a
implementação de actionPerformed() só será chamada por
eventos gerados por JB1.
DOCUMENTAÇÃO JAVA
• https://docs.oracle.com/javase/8/docs/api/javax/swing/package-
summary.html
EXERCÍCIOS

Interfaces Gráficas em Java Parte 1

  • 1.
    INTERFACES GRÁFICAS SWING –PARTE 1 Prof.ª M.ª Elaine Cecília Gatto
  • 2.
  • 3.
    INTRODUÇÃO • SWING: • Coleçãode classes e interfaces • Rico conjunto de componentes visuais: • Botões de ação • Campos de texto • Barras de rolagem • Caixas de seleção • Árvores • Tabelas • Menus
  • 4.
    INTRODUÇÃO • Evento • Éum recurso Java • É o mecanismo pelo qual o programa é notificado sobre iterações do usuário • AWT • Abstract Window Toolkit • Sistema de interface gráfica original do Java • Dependente de plataforma
  • 5.
    INTRODUÇÃO • AWT • Componentespesados • Interface gráfica usável, porém limitada • Problemas com o uso de janelas nativas específicas da plataforma (ou pares nativos): • Um componente pode aparecer e agir de forma diferente em cada sistema operacional que executar; • Aparência fixa sem possibilidade de alteração; • Componentes pesados são sempre opacos; • etc.;
  • 6.
    INTRODUÇÃO • SWING • 1997 •Java Foundation Classes = JFC • Java 1.1: biblioteca separada • Java 1.2: integrado à biblioteca • Recursos chave: • Componentes leves • Aparência adaptável
  • 7.
    INTRODUÇÃO • SWING • Componentesleves: • O componente é escrito em Java • Usa a janela fornecida por um predecessor pesado • Não tem um par nativo • Eficientes e Flexíveis • Formas geométricas diversas • Componentes leves são transformados em pares específicos da plataforma, mas a aparência é determinada pelo swing
  • 8.
    INTRODUÇÃO • SWING • Cadacomponente swing é gerado por código Java e não por pares específicos de plataforma • Aparência e lógica são separadas • Aparência: • Permite alterar a maneira como o componente é gerado sem afetar outros aspectos • Conecta uma nova aparência a qualquer componente sem criar efeitos colaterais no código • Metal e Motif
  • 9.
    INTRODUÇÃO • SWING • AparênciaMetal: • Disponível para todos • Independente de plataforma • Aparência padrão • MVC: • Model-View-Control • Arquitetura de componentes clássica • Permite a aparência adaptável
  • 10.
    INTRODUÇÃO • SWING • MVC: •Model: informações de estado associadas ao componente • View: determina como o componente será exibido na tela • Control: determina como o componente reagirá ao usuário • Exemplo: quando alguém clicar em uma caixa de seleção, o CONTROLADOR reagirá alterando o MODELO para refletir a escolha, resultando na atualização da VISUALIZAÇÃO
  • 11.
    INTRODUÇÃO • SWING • Arquiteturamodelo-delegação de UI: • Arquitetura modelo separável • Swing usa MVC mas não a versão clássica • Swing usa uma versão modificada de MVC que combina view e control na mesma entidade lógica (delegação UI) • Swing é fácil de usar e NÃO substitui o AWT • AWT ainda faz parte do JAVA e SWING se baseia nele
  • 12.
  • 13.
    COMPONENTES E CONTEINERES •Dois importantes itens • Todos os contêineres também são componentes • Componentes: • É um controle visual independente • Botão de ação, controle deslizante, etc. • Contêineres: • Contém um grupo de componentes • Tipo especial de componente • Projetado para conter outros componentes
  • 14.
    COMPONENTES E CONTEINERES •Toda interface gráfica terá pelo menos UM CONTEINER • Contêineres podem conter outros contêineres • Hierarquia de contenção: Deve haver um contêiner de nível superior
  • 15.
    COMPONENTES E CONTEINERES •Componentes: • Componentes swing derivam de Jcomponent • JComponent: • Fornece funcionalidade comum a todos os componentes • Herda as classes Container e Component de AWT • Pacote: javax.swing (representação dos componentes) • Um componente Swing se baseia e é compatível com um componente do AWT
  • 16.
    COMPONENTES E CONTEINERES JAppletJButton JCheckBox JCheckBoxMenuItem JColoChooser JComboBox JComponent JDesktopPane JDialog JEditorPane JFileChooser JFormattedTextField JFrame JInternaFrame JLabel JLayer JLayeredPane JList JMenu JMenuBar JMenuItem JOptionPane JPanel JPasswordField JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator JSlider JSpinner JSplitPane JTabbedPane JTable JTextArea JTextField JTextPane JToggleButton JToolBar JToolTip JTree JViewPort JWindows
  • 17.
    COMPONENTES E CONTEINERES •Contêineres de nível superior: • JFrame, JApplet, JWindow e JDialog • Não herdam de JComponent • Herdam de Component e Container de AWT • São componentes pesados • Estão no topo de uma hierarquia de contenção • Não podem estar contidos em outros contêineres • JFrame é o mais usado para aplicativos
  • 18.
  • 19.
    PAINÉIS DO CONTEINER •Cada contêiner de nível superior define um conjunto de painéis • JROOTPANE: • Topo da hierarquia • Container leve • Gerencia outros painéis • Ajuda a gerenciar a barra de menus • Painel de vidro, painel de conteúdo e painel em camadas: painéis que compõem o painel raiz
  • 20.
    PAINÉIS DO CONTEINER •Painel de vidro: • Painel de nível superior • Fica acima de todos os outros painéis • Cobre totalmente os outros painéis • Permite o gerenciamento de eventos do mouse que afetam o contêiner inteiro ou a geração de algo acima de outro componente
  • 21.
    PAINÉIS DO CONTEINER •Painel em CAMADAS: • Permite que os componentes recebam valores de profundidade • O valor de profundidade determina como os componentes são sobrepostos • Contem o painel de conteúdo e a barra de menus que é opcional
  • 22.
    PAINÉIS DO CONTEINER •Painel de conteúdo: • Painel que a sua aplicação interagirá • É a este painel que serão adicionados componentes visuais • Contem os componentes com os quais o usuário interage • Muito do que acontece com esses painéis é em segundo plano e não teremos de usar diretamente
  • 23.
  • 24.
    GERENCIADORES DE LAYOUT •Controla a posição dos componentes dentro de um contêiner • Determina o local dos controles dentro de um contêiner • Todos os gerenciadores de layout são instancias de uma classe que implementa a interface LAYOUTMANAGER
  • 25.
    GERENCIADORES DE LAYOUT •FlowLayout: • Layout simples • Posiciona os componentes da esquerda para a direita e de cima para baixo • BorderLayout: • Layout padrão para um painel de conteúdo • Posiciona os componentes no centro ou nas bordas do contêiner
  • 26.
    GERENCIADORES DE LAYOUT •GridLayout: • Dispõe os componentes dentro de uma grade • GridBagLayout: • Dispõe os componentes de tamanhos diferentes dentro de uma grade flexível
  • 27.
    GERENCIADORES DE LAYOUT •BoxLayout: • Dispõe os componentes vertical ou horizontalmente dentro de uma caixa • SpringLayout: • Dispõe os componentes de acordo com um conjunto de restrições
  • 28.
  • 29.
    EXEMPLO • JFrame: contêinerde nível superior • JLabel: componente que cria um rótulo e exibe informação. É um componente passivo
  • 30.
    EXEMPLO • Programas swingsão acionados por eventos • O evento gerado é passado para o aplicativo com uma chamada a um tratador de eventos que o aplicativo define • O tratador é executado na THREAD de despacho do evento fornecida pelo Swing e não na THREAD principal do aplicativo • Tratadores de eventos são chamados em uma THREAD que não foi criada por eles
  • 31.
    EXEMPLO • Duas THREADsdiferentes não podem atualizar o mesmo componente ao mesmo tempo. • Todos os componentes de GUI devem ser criados e atualizados a partir da THREAD de despacho do evento E NÃO da THREAD PRINCIPAL do aplicativo • MAIN é executado na thread principal e NÃO pode instanciar diretamente um objeto GUI. • Main deve criar um objeto RUNNABLE para ser executado na THREAD de despacho do evento e fazer esse objeto criar a GUI.
  • 32.
    EXEMPLO • Swing Utilities •Dois métodos para criar thread no despacho de evento • invokeLater(Runnable objeto): retorna imediatamente • invokeAndWait(Runnable objeto): espera até o objeto.run() retornar
  • 33.
  • 34.
    TRATAMENTO DE EVENTOS •Modelo de delegação de eventos: • Mecanismo de tratamento de eventos • Uma fonte gera um evento e o envia para um ou mais ouvintes • O ouvinte apenas espera até receber um evento • Ao receber o evento, o ouvinte processa o evento e retorna
  • 35.
    TRATAMENTO DE EVENTOS •A lógica que processa eventos fica claramente separada da lógica da interface de usuário que os gera • Um elemento da interface de usuário pode DELEGAR o processamento de um evento para um código separado • Os ouvintes devem SE registrar em uma fonte para receber a notificação de um evento
  • 36.
  • 37.
    EVENTOS • O eventoé o objeto que descreve uma mudança de estado em uma fonte • Java.ultil.EventObject: super classe de todos os eventos • Java.awt.evento e javax.swing.event: classes de eventos
  • 38.
  • 39.
    FONTES DE EVENTOS •É um objeto que gera um evento. • Quando um evento é gerado, a fonte deve envia-lo para todos os ouvintes registrados. • addTipoListener(TipoListener tl): método usado pelos ouvintes para se registrarem em uma fonte • Cada tipo de evento tem o seu próprio método de registro.
  • 40.
    FONTES DE EVENTOS •addKeyListener(): método que registra um ouvinte que recebe eventos de pressionamento de teclas no teclado • addMouseMotionListener(): método que registra um ouvinte de movimento do mouse • Quando ocorre um evento, todos os ouvintes registrados são notificados.
  • 41.
    FONTES DE EVENTOS •removeTipoListener(TipoListener tl): método fornecido pela FONTE para que um ouvinte possa cancelar interesse em um tipo específico de evento • removeKeyListener(): remove um ouvinte de pressionamento de teclas • A fonte que gera os eventos deve fornecer os métodos para adicionar e remover ouvintes
  • 42.
  • 43.
    OUVINTES DE EVENTOS •Um OUVINTE é um objeto que é notificado quando um evento ocorre. • Dois requisitos: • 1) precisa ter registro em uma ou mais fontes para ser notificado sobre um tipo de evento • 2) deve implementar métodos para o recebimento e processamento desse evento
  • 44.
    OUVINTES DE EVENTOS •Um OUVINTE é um objeto que é notificado quando em evento ocorre. • Dois requisitos: • 1) precisa ter registro em uma ou mais fontes para ser notificado sobre um tipo de evento • 2) deve implementar métodos para o recebimento e processamento desse evento
  • 45.
    OUVINTES DE EVENTOS •Os métodos que recebem e processam eventos são definidos em um conjunto de interfaces. • ActionListener: • Interface que define um método que recebe notificação quando uma ação ocorre • Qualquer objeto pode receber e processar esse evento
  • 46.
    OUVINTES DE EVENTOS •Um tratador de eventos deve executar sua tarefa rapidamente e retornar. • Quando uma operação demorada é necessária, uma THREAD separada é criada para esse fim. • Uma operação longa não deve ser executada por um tratador de eventos pois isso retardaria a aplicação inteira.
  • 47.
    CLASSES DE EVENTOSE INTERFACES DE OUVINTES
  • 48.
    CLASSES DE OUVINTES •EventObject: • superclasse de todos os eventos • faz parte de java.útil • AWTEvent: • subclasse de EventObject. • superclasse de todos os eventos em AWT
  • 49.
    JAVA.AWT.EVENT Classe de Eventos Geração Ouvintede eventos ActionEvent Quando uma ação ocorre dentro de um controle ActionListener Adjustment Event Quando uma barra de rolagem é manipulada AdjustmentEvent FocusEvent Quando um componente ganha ou perde foco FocusEvent
  • 50.
    JAVA.AWT.EVENT Classe de Eventos Geração Ouvintede eventos ItemEvent Quando um item é selecionado ItemListener KeyEvent Quando uma entrada do teclado é recebida KeyListener MouseEvent Arrastar, mover, clicar, pressionar, soltar. Quando o mouse entra ou sai de um componente MouseListener e MouseMotionList ener
  • 51.
    JAVA.AWT.EVENT Classe de Eventos Geração Ouvintede eventos Mouse WhellEvent Quando a roda do mouse é movida Mouse WhellEvent WindowEvent Quando um janela é ativada, fechada, desativada, deiconificada, iconificada, aberta ou abandonada WindowListener
  • 52.
    JAVA.SWING.EVENT Classe de Eventos Geração Ouvintede eventos AncestorEvent Quando o predecessor de um componente tiver sido adicionado, movido ou removido AncestorListener ChangeEvent Quando um componente muda seu estado ChangeListener
  • 53.
    JAVA.SWING.EVENT Classe de Eventos Geração Ouvintede eventos Hyperlink Event Quando um hyperlink é acessado HyperlinkEvent ListDataEvent Quando o conteúdo de uma lista muda ListDataListener ListSelection Event Quando a seleção em uma lista muda ListSelection Event MenuEvent Quando ocorre uma seleção no menu MenuListener
  • 54.
    JAVA.SWING.EVENT Classe de Eventos Geração Ouvintede eventos Table ModelEvent Quando o modelo tabela muda Tabel ModelEvent Tree Expansion Event Quando uma árvore é expandida ou recolhida Tree ExpansionEvent
  • 55.
    JAVA.SWING.EVENT Classe de Eventos Geração Ouvintede eventos Tree ModelEvent Quando um modelo de árvore é expandida ou recolhida Tree ModelListner Tree SelectionEvent Quando um nó de uma árvore é selecionado Tree SelecionListener
  • 56.
  • 57.
    CLASSES ADAPTADORAS • Fornecemuma implementação vazia dos métodos das interfaces de ouvintes de eventos • São uteis para receber e processar apenas alguns dos eventos associados a uma interface de eventos específica • Uma nova classe pode ser definida para agir como um ouvinte de eventos, estendendo uma das classes adaptadoras e implementando somente os métodos que forem interessantes
  • 58.
    CLASSES ADAPTADORAS • Issopermite diminuir a quantidade de métodos vazios desnecessários • Nem todas as interfaces tem uma classe adaptadora correspondente • Normalmente existem classes adaptadoras para aqueles ouvintes que tem mais de dois métodos
  • 59.
    CLASSES ADAPTADORAS • MouseMotionListener: •mouseDragged() • mouseMoved() • MouseMotionAdapter fornece implementações vazias destes dois métodos • Se o interesse estiver apenas na ação de arrastar o mouse, então: • Estender MouseMotionAdapter • Implementar mouseDragged()
  • 60.
    CLASSES ADAPTADORAS Classe adaptadoraImplementa FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener MouseInputAdapter MouseListener e MouseMotionListener WindowsAdapter WindowsListener
  • 61.
  • 62.
    BOTÃO DE AÇÃO •É um dos controles mais simples e mais usados • É uma instancia de JBUTTON • JBUTTON herda a classe abstrata ABSTRACTBUTTON • ABSTRACTBUTTON define a funcionalidade comum a todos os botões • Botões podem conter: texto, imagens ou ambos
  • 63.
    BOTÃO DE AÇÃO •Quando um botão de ação é pressionado, ele gera um ACTIONEVENT • addActionListener(ActionListener AL): • adiciona ouvinte de ação • AL: objeto que receberá as notificações do evento • removeActionListener(ActionListener AL): • remove ouvinte de ação • AL: objeto que receberá as notificações do evento
  • 64.
    BOTÃO DE AÇÃO •Sintaxe de JBUTTON: • JButton(String msg) • msg: texto que será exibido no botão • Exemplo: JButton jb1 = new JButton(“Botão1");
  • 65.
    BOTÃO DE AÇÃO •ActionListener defie um método: • actionPerformed(ActionEvent ae) • Este método sempre é chamado quando um botão é pressionado. TRATADOR DE EVENTOS
  • 66.
    BOTÃO DE AÇÃO •Comando de ação: • getActionCommand() • Identifica qual botão foi pressionado • Obtém-se o comando de ação chamando este método
  • 67.
    BOTÃO DE AÇÃO •Sempre que um botão é pressionado, ele gera um evento de ação e todos os ouvintes registrados são notificados com uma chamada ao método ActionPERFORMED() • O objeto ACTIONEVENT que representa o evento de botão é passado como parâmetro. O evento que ocorreu é passado via ACTIONEVENT • O comando de ação associado ao botão que gerou o evento é obtido com uma chamada a GETACTIONCOMMAND()
  • 68.
    BOTÃO DE AÇÃO •Exemplo no netbeans
  • 69.
  • 70.
    JTEXTFIELD • Permite queo usuário insira uma linha de texto • Herda da classe abstrata JTEXTCOMPONENT • JTEXTCOMPONENT: • Superclasse de todos os componentes de texto • Obtém entradas do usuário baseadas em texto
  • 71.
    JTEXTFIELD • Sintaxe JTextField(int cols) •Cols: • largura do campo de texto em colunas • Tamanho físico do campo de texto na tela • Uma string maior que o número de colunas pode ser inserida
  • 72.
    JTEXTFIELD • ActionEvent égerado quando a tecla ENTER é pressionada: • addActionListener() • removeActionListener() • actionPerformed() • getText(): obtém a string exibida atualmente no campo de texto
  • 73.
    JTEXTFIELD • JTEXTFIELD tambémpossui uma string de comando de ação • O comando de ação é o conteúdo atual do campo de texto • setActionCommand(String cmd): permite configurar um comando de ação de acordo com sua necessidade
  • 74.
    JTEXTFIELD • Exemplo: JTextFieldjt1 = new JTextField(20); • EXEMPLOS NO NETBEANS (3 e 4)
  • 75.
    CLASSES INTERNAS ANONIMAS •Tratamento de eventos: • Abordagem simples e direta • MAIN implementa a interface de ouvinte • Todos os eventos são enviados para uma instancia dessa classe • MAIS FORMAS DE TRATAR EVENTOS
  • 76.
    CLASSES INTERNAS ANONIMAS •Classes de ouvinte separadas: • Classes diferentes tratariam eventos distintos e ficariam separadas da MAIN • Implementar ouvintes com classes internas anônimas
  • 77.
    CLASSES INTERNAS ANONIMAS •CLASSE INTERNA: • É uma classe não estática declarada dentro de outra classe • É uma classe aninhada • Uma classe interna não existe de forma independente da classe que a contem • Uma classe interna tem acesso a todas as variáveis e métodos de sua classe externa e pode referencia-los diretamente
  • 78.
    CLASSES INTERNAS ANONIMAS •CLASSE INTERNAANONIMA: • É uma classe interna que não tem um nome • A instancia da classe é gerada dinamicamente quando necessário • Facilitam a implementação de alguns tratadores de eventos • Vantagem: o componente que chama os métodos da classe já é conhecido
  • 79.
    CLASSES INTERNAS ANONIMAS •CLASSE INTERNAANONIMA: jb1.addActionListener ( new ActionListener () { public void actionPerformed(ActionEvent ae){ //tratamento das ações } } );
  • 80.
    CLASSES INTERNAS ANONIMAS •CLASSE INTERNAANONIMA: jb1.addActionListener ( new ActionListener () { public void actionPerformed(ActionEvent ae){ //tratamento das ações } } ); Não há necessidade de chamar GETACTIONCOMMAND() para determinar que componente gerou o evento, porque a implementação de actionPerformed() só será chamada por eventos gerados por JB1.
  • 81.
  • 82.