14
Componentes GUI Componentes GUI GUI GUI – Grafical User Interface Grafical User Interface – São construídas a partir São construídas a partir de componentes GUI chamados de controles ou widgets de componentes GUI chamados de controles ou widgets (windows gadgets (windows gadgets – engenhocas de janela). engenhocas de janela). Ex: JOptionPane fornece caixas de diálogos pré Ex: JOptionPane fornece caixas de diálogos pré- empacotadas para entrada/saída, como vimos ao empacotadas para entrada/saída, como vimos ao usarmos showMessageDialog e showInputDialog. usarmos showMessageDialog e showInputDialog. Existe diversas funcionalidades disponíveis nas Existe diversas funcionalidades disponíveis nas bibliotecas de classes Java destinadas a prover a bibliotecas de classes Java destinadas a prover a comunicação homem comunicação homem-máquina via interface gráfica. máquina via interface gráfica. Os elementos básicos para criar um GUI residem em Os elementos básicos para criar um GUI residem em dois pacotes: Swing e AWT. dois pacotes: Swing e AWT. AWT: Abstract Window Toolkit (pacote java.awt) são classes AWT: Abstract Window Toolkit (pacote java.awt) são classes básicas para construção de interfaces com janelas. básicas para construção de interfaces com janelas. Swing: Fornece melhores alternativas aos componentes da Swing: Fornece melhores alternativas aos componentes da AWT. Implementado somente a partir da versão 1.2. AWT. Implementado somente a partir da versão 1.2.

Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

  • Upload
    lythien

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI GUI GUI –– Grafical User Interface Grafical User Interface –– São construídas a partir São construídas a partir

de componentes GUI chamados de controles ou widgets de componentes GUI chamados de controles ou widgets (windows gadgets (windows gadgets –– engenhocas de janela).engenhocas de janela).

Ex: JOptionPane fornece caixas de diálogos préEx: JOptionPane fornece caixas de diálogos pré--empacotadas para entrada/saída, como vimos ao empacotadas para entrada/saída, como vimos ao usarmos showMessageDialog e showInputDialog.usarmos showMessageDialog e showInputDialog.

Existe diversas funcionalidades disponíveis nas Existe diversas funcionalidades disponíveis nas bibliotecas de classes Java destinadas a prover a bibliotecas de classes Java destinadas a prover a comunicação homemcomunicação homem--máquina via interface gráfica.máquina via interface gráfica.

Os elementos básicos para criar um GUI residem em Os elementos básicos para criar um GUI residem em dois pacotes: Swing e AWT. dois pacotes: Swing e AWT. AWT: Abstract Window Toolkit (pacote java.awt) são classes AWT: Abstract Window Toolkit (pacote java.awt) são classes

básicas para construção de interfaces com janelas.básicas para construção de interfaces com janelas. Swing: Fornece melhores alternativas aos componentes da Swing: Fornece melhores alternativas aos componentes da

AWT. Implementado somente a partir da versão 1.2. AWT. Implementado somente a partir da versão 1.2.

Page 2: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI A aparência e maneira como um usuário pode interagir com A aparência e maneira como um usuário pode interagir com

componentes AWT diferem de acordo com a plataforma. componentes AWT diferem de acordo com a plataforma. Componentes Swing permitem especificar uniformemente a Componentes Swing permitem especificar uniformemente a aparência e o comportamento para o aplicativo em todas as aparência e o comportamento para o aplicativo em todas as plataformas ou utilizar aparência e comportamento personalizados plataformas ou utilizar aparência e comportamento personalizados em cada plataforma.em cada plataforma.

Componentes Swing são implementados diretamente na plataforma Componentes Swing são implementados diretamente na plataforma Java sendo mais portáveis e flexíveis que os componentes originais Java sendo mais portáveis e flexíveis que os componentes originais do pacote AWT que foram implementados na GUI da plataforma do pacote AWT que foram implementados na GUI da plataforma subjacente, ou seja em código nativo. Por isto geralmente Swing subjacente, ou seja em código nativo. Por isto geralmente Swing são mais usados.são mais usados.

Page 3: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI Estas classes são parte de um conjunto mais genérico de Estas classes são parte de um conjunto mais genérico de

capacidades gráficas chamado de Java Foundation Classes, ou capacidades gráficas chamado de Java Foundation Classes, ou JFC.JFC.

Componentes leves X Componentes pesados: São chamados de Componentes leves X Componentes pesados: São chamados de componentes pesados aqueles que são vinculados à plataforma componentes pesados aqueles que são vinculados à plataforma local, ou dependem do sistema de janela da plataforma local para local, ou dependem do sistema de janela da plataforma local para determinar seu comportamento e aparência, já os componentes determinar seu comportamento e aparência, já os componentes leve são aqueles que não estão vinculados a componentes GUI leve são aqueles que não estão vinculados a componentes GUI reais da plataforma subjacente.reais da plataforma subjacente.

Alguns componentes Swing também são componentes pesados, Alguns componentes Swing também são componentes pesados, requerem interação direta com o sistema de janela local o que pode requerem interação direta com o sistema de janela local o que pode restringir sua aparência e funcionalidade.restringir sua aparência e funcionalidade.

Componentes leves fornecem melhor controle sobre sua aparência Componentes leves fornecem melhor controle sobre sua aparência e funcionalidade.e funcionalidade.

Page 4: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI

Duas palavras chave para nossa compreensão Duas palavras chave para nossa compreensão são:são: Componentes: Partes individuais a partir das quais Componentes: Partes individuais a partir das quais

uma GUI é construída. São botões, menus, itens de uma GUI é construída. São botões, menus, itens de menu, caixas de seleção, etc.menu, caixas de seleção, etc.

Tratamento de eventos: São as possíveis respostas Tratamento de eventos: São as possíveis respostas disparadas por ações do usuário. Caso o usuário disparadas por ações do usuário. Caso o usuário ative um componente o sistema gerará um evento ative um componente o sistema gerará um evento que enviará uma notificação ao nosso sistema que que enviará uma notificação ao nosso sistema que poderá então chamar um de seus métodos.poderá então chamar um de seus métodos.

Page 5: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI

Suplerclasses comuns de muitos Suplerclasses comuns de muitos componentes swingcomponentes swing

Page 6: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Componentes GUIComponentes GUI Uma interface gráfica em Java é baseada em dois tipos Uma interface gráfica em Java é baseada em dois tipos

de elementos:de elementos: containerscontainers: São componentes que servem para agrupar e exibir : São componentes que servem para agrupar e exibir

outros componentesoutros componentes componentscomponents: São botões, labels, scrollbars, etc.: São botões, labels, scrollbars, etc.

Todo programa que ofereça uma interface gráfica vai Todo programa que ofereça uma interface gráfica vai conter pelo menos um container, que pode ser:conter pelo menos um container, que pode ser: JFrame JFrame –– janela principal do programajanela principal do programa JDialog JDialog –– janela para diálogosjanela para diálogos JApplet JApplet –– janela para Appletsjanela para Applets

Para construirmos uma interface gráfica em Java Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, adicionamos componentes (botões, menus, textos, tabelas, listas, etc) sobre a área de um containertabelas, listas, etc) sobre a área de um container

Em nosso exemplo iremos usar um JFrame:Em nosso exemplo iremos usar um JFrame:

Page 7: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Vejamos uma janela simples. Vejamos uma janela simples. Esta janela possui os seguintes elementos:Esta janela possui os seguintes elementos:

JFrame: Armazena os demais componentesJFrame: Armazena os demais componentes JPanel: Serve para facilitar o posicionamento do botão labelJPanel: Serve para facilitar o posicionamento do botão label JButton: O botãoJButton: O botão JLabel: O texto: “Quantidade de clicks: 0”JLabel: O texto: “Quantidade de clicks: 0”

Dos elementos acima:Dos elementos acima: JFrame são containers topJFrame são containers top--level, sempre haverá um dos 3 level, sempre haverá um dos 3

anteriormente citadosanteriormente citados JPanel são containers intermediate, podem estar ou não JPanel são containers intermediate, podem estar ou não

presentes (mas geralmente estão).presentes (mas geralmente estão). JButton e JLabel são componentes atômicos, não podem ser JButton e JLabel são componentes atômicos, não podem ser

usados para conter outros e geralmente respondem ao usuário.usados para conter outros e geralmente respondem ao usuário.

Page 8: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Vejamos o código do exemplo anterior:Vejamos o código do exemplo anterior:

import javax.swing.*;import javax.swing.*;

public class ExJanelapublic class ExJanela{{

public static void main(String args[])public static void main(String args[]){{

JFrame frame = new JFrame("Aplicação Swing");JFrame frame = new JFrame("Aplicação Swing");JButton but = new JButton("Sou um botão");JButton but = new JButton("Sou um botão");JLabel texto = new JLabel("Quantidade de clicks: 0");JLabel texto = new JLabel("Quantidade de clicks: 0");JPanel painel = new JPanel();JPanel painel = new JPanel();

painel.add(but);painel.add(but);painel.add(texto);painel.add(texto);

frame.getContentPane().add(painel);frame.getContentPane().add(painel);frame.pack();frame.pack();frame.show();frame.show();

}}}}

Page 9: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Como poderíamos adicionar Como poderíamos adicionar funcionalidades à janela? Usando herança funcionalidades à janela? Usando herança para gerar uma nova classe a partir de para gerar uma nova classe a partir de JFrame.JFrame.

Vejamos como ficaria o código caso Vejamos como ficaria o código caso usássemos herança:usássemos herança:

Page 10: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

import javax.swing.*;import javax.swing.*;

public class ExJanela2 extends JFramepublic class ExJanela2 extends JFrame{{

JButton but;JButton but;JLabel texto;JLabel texto;JPanel painel;JPanel painel;

public ExJanela2()public ExJanela2(){{

super("Aplicação Swing");super("Aplicação Swing");but = new JButton("Sou um botão");but = new JButton("Sou um botão");texto = new JLabel("Quantidade de clicks: 0");texto = new JLabel("Quantidade de clicks: 0");painel = new JPanel();painel = new JPanel();

painel.add(but);painel.add(but);painel.add(texto); painel.add(texto);

getContentPane().add(painel);getContentPane().add(painel);}}

public static void main(String args[])public static void main(String args[]){ {

ExJanela2 janela = new ExJanela2();ExJanela2 janela = new ExJanela2();janela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // Nova linhajanela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // Nova linhajanela.pack();janela.pack();janela.show();janela.show();

}}}}

Page 11: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Observe a nova linha acrescentada ao método main. O Observe a nova linha acrescentada ao método main. O método setDefaultCloseOperation especifica como a método setDefaultCloseOperation especifica como a janela irá se comportar ao ser fechada. Seus possíveis janela irá se comportar ao ser fechada. Seus possíveis argumentos são:argumentos são: DISPOSE_ON_CLOSE DISPOSE_ON_CLOSE –– Destrói a janelaDestrói a janela DO_NOTHING_ON_CLOSE DO_NOTHING_ON_CLOSE –– Desabilita a opção de fechar a Desabilita a opção de fechar a

janelajanela HIDE_ON_CLOSE HIDE_ON_CLOSE –– Apenas fecha a janelaApenas fecha a janela

Teste o programa variando os parâmetros de Teste o programa variando os parâmetros de setDefaultCloseOperation e verificando o que acontece.setDefaultCloseOperation e verificando o que acontece.

Temos uma questão ainda não resolvida: Como iremos Temos uma questão ainda não resolvida: Como iremos organizar os componentes em um JPanel? Java oferece organizar os componentes em um JPanel? Java oferece diversos layouts para estruturação de componentes. diversos layouts para estruturação de componentes. Para JPanel o layout default é FlowLayout que distribui Para JPanel o layout default é FlowLayout que distribui os componentes na horizontal. os componentes na horizontal.

Vejamos alguns outros possíveis layouts:Vejamos alguns outros possíveis layouts:

Page 12: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

BoxLayout: Posiciona os componentes na horizontal ou vertical. Ex:BoxLayout: Posiciona os componentes na horizontal ou vertical. Ex:

public class ExJanela2 extends JFramepublic class ExJanela2 extends JFrame{{

. . .. . .public ExJanela2()public ExJanela2()

{{. . .. . .painel = new JPanel();painel = new JPanel();

painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AXIS));painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AXIS));painel.add(but);painel.add(but);painel.add(texto); painel.add(texto); . . .. . .

}}

public static void main(String args[])public static void main(String args[]){ {

. . .. . .}}

}}

Page 13: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

import javax.swing.*;import javax.swing.*; import java.awt.*;import java.awt.*;

public class TestaContainerpublic class TestaContainer {{ public static void main(String args[])public static void main(String args[]) {{ int i;int i; JFrame janela = new JFrame("Teste de janela");JFrame janela = new JFrame("Teste de janela"); janela.setBounds(200,200,400,150);janela.setBounds(200,200,400,150); janela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);janela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

FlowLayout flow = new FlowLayout(FlowLayout.LEFT);FlowLayout flow = new FlowLayout(FlowLayout.LEFT);

janela.setLayout(flow);janela.setLayout(flow); for (i = 1; i <= 6; i++)for (i = 1; i <= 6; i++) janela.add(new JButton("aperte" + i));janela.add(new JButton("aperte" + i)); janela.setVisible(true);janela.setVisible(true); }} }}

Page 14: Aula GUI1.ppt [Modo de Compatibilidade] · dois pacotes: Swing e AWT. ... Para construirmos uma interface gráfica em Java adicionamos componentes (botões, menus, textos, tabelas,

Façamos alguns exercícios bem simples:Façamos alguns exercícios bem simples: 1) Implemente e execute o código abaixo no BlueJ.1) Implemente e execute o código abaixo no BlueJ. 2) Redimensione interativamente o tamanho da 2) Redimensione interativamente o tamanho da

janela e observe o posicionamento dos botões.janela e observe o posicionamento dos botões. 3) Coloque no construtor de FlowLayout um 3) Coloque no construtor de FlowLayout um

argumento FlowLayout.LEFT e observe o resultado.argumento FlowLayout.LEFT e observe o resultado. 4) Adicione ao programa os seguintes componentes:4) Adicione ao programa os seguintes componentes:

•• JLabel label1 = new JLabel("Exemplo de texto");JLabel label1 = new JLabel("Exemplo de texto");•• JTextField campo = new JTextField(15);JTextField campo = new JTextField(15);•• Obs: Não esqueça de adicionáObs: Não esqueça de adicioná--los à janela.los à janela.