POO - II PROF.: JEAN CARLO MENDES JEAN.MENDES@GMAIL.COM HTTP://.

Post on 22-Apr-2015

111 views 2 download

Transcript of POO - II PROF.: JEAN CARLO MENDES JEAN.MENDES@GMAIL.COM HTTP://.

POO - IIPROF.: JEAN CARLO MENDES

JEAN.MENDES@GMAIL.COM

HTTP://WWW.MENDESNET.COM.BR

Interface Gráfica Elementos básicos para se criar uma GUI estão

em dois pacotes

Java.awt: Abstract Window Toolkit (classes básicas) Javax.swing: Swing componentes – fornece

alternativas para os componentes da awt e possuem correspondentes (ex. Button e Jbutton).

Swing é implementada toda em Java

Interface Gráfica Swing é parte de um conjunto mais genérico

chamado JFC (Java Foundation Class)

JFC Coleção de pacotes para criação de aplicações completas para desktop Interface gráfica (GUI) Funcionalidades e interatividade

JFC - Características Componentes GUI Swing Suporte a “Look and Feel” LaF API para acessibilidade API Java 2D Suporte a Drag and Drop Internacionalização

Um pouco da história Quando o java 1.0 foi lançado continha apenas

a AWT Lida com elementos de interface delegando a criação e o

comportamento desses elementos ao conjunto de ferramentas GUI nativo da plataforma

Problema:Difícil de escrever uma biblioteca gráfica

portátil de qualidade!

Um pouco da história Em 1996 a Netscape criou uma biblioteca de

GUI chamada IFC (Internet Foundation Classes)

Elementos da interface com o usuário eram pintados em janelas em branco

Comportamento idênticos

A Sun trabalhou com a Netscape para aperfeiçoar essa abordagem, criando uma biblioteca chamada “Swing”

Swing javax.swing.* Biblioteca oficial da Java GUI Todo programa que usa Swing deve ter pelo

menos um componente do tipo container. Principais Características:

Independente de plataforma Personalizável Extensível Configurável Leve

Containers e componentes Uma interface gráfica em Java é baseada em dois

elementos: containers: servem para agrupar e exibir outros

componentes componentes: botões, labels, scrollbars, etc. Dessa forma, todo programa que ofereça uma interface vai

possuir pelo menos um container, que pode ser: – JFrame: janela principal do programa – JDialog: janela para diálogos – JApplet: janela para Applets

Container Descendentes da classe java.awt.Container Componentes que podem conter outros componentes Oferece suporte para desenho e tratamento de eventos

Containers e componentes • Para construirmos uma interface gráfica em JAVA,

adicionamos componentes (Botões, Menus, Textos, Tabelas, Listas, etc.) sobre a área da janela.

• Por essa razão a área da janela é um container, ou seja, um elemento capaz de armazenar uma lista de componentes.

Containers top level Provê o suporte que os componentes swing necessitam

para realizar o desenho da tela e o tratamento de eventos.

– JFrame: Objeto que implementa janela principal – JDialog: Objeto que implementa janela secundária – JApplet: Objeto que implementa uma área de visualização

de applets em browsers;

Containers - Exemplo

Testar... Redimensione interativamente a janela da aplicação e

observe o comportamento dos botões da interface. Troque o argumento de FlowLayout(), para FlowLayout

(FlowLayout.LEFT) e observe. Adicione no programa acima, os seguintes componentes:

JLabel label = new JLabel("Exemplo de texto:");caixa.add(label); JTextField campo = new JTextField(15);caixa.add(campo); janela.pack(); // Redimensiona a janela

Criando uma janela Uma janela em Java é representada por um objeto da

classe Window.

Criando uma janela

JFrame Um frame é uma janela que, por default, tem decorações

tais como:– Uma borda– Um título– Botões para minimizar e fechar a janela

Aplicações com uma GUI usam, tipicamente, pelo menos um frame.

JFrame

JFrame

Component e container Desde que a classe Container é uma sub-classe da

classe Component, todo objeto container é também um Componente.

A diferença básica entre um objeto JFrame e um objeto Window é que o JFrame representa a janela principal de uma aplicação.

Antes de criar um objeto Window, é preciso criar um objeto JFrame.

Como a classe JDialog deriva diretamente da classe Window, pode-se criar objetos JDialog somente no contexto de um objeto JFrame.

Component e container JFrame: Um objeto desta classe possui uma barra de título e

características para receber menus e outros componentes.

JDialog: Usada para definir janelas de diálogo para entrada de dados. Normalmente usada em resposta a uma opção de menu selecionada. Definida em função de um objeto JFrame.

JApplet: Classe base para applets Java. É possível desenhar e adicionar menus e outros componentes em um JApplet.

JComponent: As subclasses de JComponent definem um conjunto de componentes standard (menus, botões, checkboxes, etc.)

Component e container Outros componentes:

Button (JButton) Menu (JMenu) Text Component (JTextComponent) List (JList) Table (JTable)

Testar...

Testar...

E agora??

Como “organizar” os componentes no Jpanel?

Java oferente diversos “layouts” para a estruturação dos componentes

Para o JPanel temos, por exemplo, o FlowLayout que distribui os componentes na horizontal

Layouts Já foi visto que interfaces em JAVA são

construídas na medida em que adicionamos Components a Containers.

Os Containers são responsáveis então por manter os componentes visíveis, repassar os eventos, etc.

Layouts Como a filosofia da linguagem JAVA é de que os

programas sejam extremamente portáveis, a filosofia da interface visa também ser extremamente adaptável.

Por essa razão a disposição dos Components sobre o Container não é indicada por um par ordenado (x,y) como na maioria das bibliotecas de construção de interface com o usuário (MFC - Microsoft, OWL - Borland etc).

LayoutsÉ possível definir seus próprios Layouts,

mas a linguagem oferece um conjunto de Layouts básicos que simplificam o trabalho.

O arranjo dos componentes no container é gerenciado por um LayoutManager

LayoutsA vantagem da existência de um

LayoutManager é que a apresentação dos componentes se adapta quando do redimensionamento da janela

A desvantagem é o pouco domínio que o programador tem da posição dos componentes com alguns LayoutManagers

Flow LayoutComponentes distribuídos sequencialmente da

esquerda para a direita e de cima para baixo;Respeita o tamanho dos componentes mesmo que

não haja espaço no ContainerPercebam a diferença de aparência entre os botões

“dois” e “três”

Grid LayoutSimilar ao FlowLayout, mas cada

componente é alocado em uma célula de igual tamanho.

Pode-se definir um vetor ou matriz de células nas quais os componentes são alocados

Divide a área em uma gradeDispõe os elementos da esquerda para a

direita e de coma para baixoTodas as células de igual tamanho

Outro Exemplo de Grid

GridBagLayoutSemelhante ao GridLayout, porém as divisões podem

ter tamanhos diferentes

Utiliza a classe GridBagConstraints para dimensionar e posicionar os componentes

É flexível, porém complicado de usar. Sendo assim é escolhido somente quando os outros tipos não se encaixam na necessidade

BorderLayout Layout padrão para a maioria das aplicações

Componentes são adicionados especificando a área que irá ocupar.

Divide o Container em cinco regiões: BorderLayout.CENTER BorderLayout.NORTH BorderLayout.EAST BorderLayout.SOUTH BorderLayout.WEST

BorderLayout

BoxLayoutRespeita o tamanho dos componentesColoca os componentes em linha ou coluna

BoxLayout.X_AXIS para componentes em linhaBoxLayout.Y_AXIS para componentes em coluna