• Nenhum resultado encontrado

Containers e gerenciadores

No documento Programação_Orientada_ObjetoII (páginas 64-70)

de Layout

Entre os diversos tipos de com- ponentes, há uma classe de com- ponentes descendentes de java. awt.Container, chamados de

Containers, que são componentes criados para conter outros com- ponentes, permitindo agrupá-los e definir layouts em camadas. Existe um grupo especial de con- tainers, chamado de top-level. Fa- zem parte desse grupo: JFrame, JDialog e JApplet. Esses contai- ners são base para os componen- tes numa aplicação Swing. Um componente, para ser exibi- do na tela, deve fazer parte de um container. Além de componentes de tela, um container pode conter uma barra de menu.

O JPanel se destaca entre os con- tainers e são usados para organi- zar um grupo ou mais grupos de componentes filhos, permitindo separar uma tela em seções lógi- cas e permitindo que componen- tes relacionados, sejam agrupados com mais facilidade. Outro uso dessa classe é substituir o compo- nente Canvas, quando for neces- sário uma área de desenho. O seu gerenciador de layout padrão é o FlowLayout.

Os gerenciadores de layouts são componentes que controlam tan- to a disposição, quanto a dimen- são dos componentes em um container. O NetBeans facilita o desenvolvimento de aplicações Swing por gerenciar o Layout de uma maneira eficiente, criando di- namicamente GroupLayout. Confira os gerenciadores de layout disponíveis.

FlowLayout: não restringe o

tamanho dos componentes que administra, e lhes permite ter o tamanho desejado. Permite ali- nhar os componentes à esquerda, à direita ou ao centro. Layout padrão do JPanel.

CardLayout: permite tratar a

interface como uma série de car- tões, os quais você pode ver um por vez. O método add( ) é usa- do para adicionar cartões a um CardLayout, e recebe um JPanel e uma String como argumento, que identifica o panel. O método show( ) mostra o cartão que foi solicitado.

BorderLayout: é o gerencia-

dor padrão do JPanel. Divide o container em cinco áreas.

GridLayout: o gerenciador

GridLayout provê flexibilidade para colocar componentes. Ele é criado com várias linhas e colu- nas. GridLayout sempre ignora o tamanho dos componentes. A largura de todas as células é idên- tica e é determinada, dividindo a largura disponível pelo número de colunas. O mesmo é feito para a altura.

SpringLayout : é um ge-

renciador de layout flexível e ideal para criar interfaces gráficas elaboradas. Permite configurar relacionamento entre as bordas dos controles, por exemplo, configurar que a borda esquerda está a 5 pixels da borda direita de outro componente. Os compo- nentes são arranjados de acordo com as restrições.

GroupLayout: é um gerencia-

dor de layouts que organiza gru- pos de componentes de maneira hierárquica de modo a viabilizar o posicionamento deles em um determinado container.

SEÇÃO 5

Estudo de caso: objetos

de calcular

O objetivo desse estudo de caso é criar interface gráfica para calcu- ladora, já desenvolvida, na seção3. Serão utilizados alguns princípios de um padrão de arquitetura cha- mado MVC (Model, View, Con- trol).

O MVC procura separar a camada de lógica de negócio, da camada de lógica de apresentação. Isso possibilita desenvolver, manutenir e testar cada camada isoladamen- te. Outra característica da adoção desse modelo é a independência entre apresentação da aplicação, dos dados e das operações sobre os dados.

O Model (modelo) é a lógica de negócio. Ele possui a representa- ção detalhada das informações da aplicação. O Model, por exemplo, implementa as entidades envolvi- das na solução do problema pro- posto.

A View (visão) é a camada de in- terface com o usuário e onde o usuário interage com a aplicação. Nela são apresentadas as infor- mações para o usuário, possibi- litando a ele responder a uma condição. Essa camada não deve acessar diretamente ao banco de dados, e, normalmente, também não solicita diretamente opera- ções ao Model.

O Controller intermedia a View e o Model controlando todo o pro- cesso. Ele transforma eventos ge- rados na View em operações no Model. Cada iteração do usuário com a View é, primeiramente, in- terpretada pelo Controller, para, então, acessar o Model.

SEÇÃO 4

Eventos

A interação entre o usuário e um componente ou entre compo- nentes de uma interface gráfica ocorre por meio de eventos. Os eventos utilizam dois elementos distintos: manipuladores de even- tos e objetos de eventos.

Um manipulador de evento é um método que recebe um objeto de evento, decifra, e processa a inte- ração do usuário. Com o modelo de delegação, os eventos são en- viados ao componente, mas cada componente registra um manipu- lador de eventos para tratá-los. Os manipuladores de eventos são chamados Listeners.

Os Listeners são classes que im- plementam a interface de Even- tListener ou uma das suas deriva- ções. Listeners podem receber e processar o evento, desse modo, o manipulador de evento pode estar em um objeto separado do com- ponente. Todo evento tem uma interface de listeners correspon- dentes, que define métodos em uma classe designada a receber aquele tipo de evento.

A classe que implementa a inter- face define esses métodos, e pode ser registrada como um listener. Importante notar que não são propagados eventos de compo- nentes, que não possui nenhum listener registrado.

No exemplo do estudo de caso, desta unidade, será utilizada uma for- ma simplificada de MVC para ilustrar o seu uso. Como primeira tarefa, deve-se abrir o projeto da calculadora desenvolvido na seção 3. Não será preciso criar um Model, visto que na seção 3, há a classe ParserOpera- cao, que já representa toda a lógica de negócio envolvida.

Feito isso, a próxima tarefa é criar um novo pacote chamado ‘com.senai. calculadora.mvc’. Em projetos mais elaborados, seria importante separar os três elementos em três pacotes distintos: ‘com.senai.calculadora.model’, ‘com. senai.calculadora.view’ e ‘com.senai.calculadora.control’.

No pacote criado, deve-se criar um novo JFrame, chamado, por exem- plo, CalculadoraView. A propriedade title precisa ser definida como “Cal- culadora”.

Nesse JFrame deve conter:

rótulo (JLabel): altere o texto para “Operacão” e o seu nome para “jlOperacao”;

campo de Texto (JTextField): limpe o conteúdo e altere o seu nome para jtfExpressao;

botão (JButton): altere o seu texto para “Calcular” e o seu nome para jbCalcular.

O formulário ficará conforme a figura a seguir.

Figura 35: Classe CalculadoraView

A próxima etapa será criar uma nova classe no pacote ‘com.senai.calcu- ladora.mvc’. Ela deverá se chamar CalculadoraController. Nela existirão referências tanto à View, quanto à classe ParserOperacao. O código da classe CalculadoraController pode ser visto a seguir. Durante a codifi- cação dessa classe, o Netbeans poderá indicar alguns erros, pois, serão utilizados métodos que ainda não foram implementados na View.

package com.senai.calculadora.mvc;

import com.senai.calculadora.ParserOperacao; import javax.swing.JOptionPane;

public class CalculadoraController { private ParserOperacao parserOperacao; CalculadoraView calculadoraView; public CalculadoraController() {

parserOperacao = new ParserOperacao(); calculadoraView = new CalculadoraView(); calculadoraView. setCalculadoraController (this); }

public void show (){

calculadoraView.setVisible(true); }

public void calcular(String expressao){ try{

double resultado = parserOperacao.processar(expressao); calculadoraView.setResultado(resultado);

}catch(Exception e){

JOptionPane.showMessageDialog(calculadoraView, “Erro ao processar expressão!\n”+e.getMessage(), “Erro”, JOptionPane.ERROR_MESSAGE);

} } }

Nesse ponto, deve-se modificar o JFrame CalculadoraView para supor- tar as novas operações. Observe a seguir o código que deve ser adicio- nado à classe. Também deve-se adicionar, no evento, a chamada para o CalculadoraController. O código para isso é o que aciona o evento do botão. Confira.

Código adicional na CalculadoraView // código continua ...

public class CalculadoraView extends javax.swing.JFrame { private CalculadoraController calculadoraController; public void setCalculadoraController(

CalculadoraController calculadoraController){

this.calculadoraController = calculadoraController; }

public void setResultado(double resultado){ String vl = String.valueOf(resultado); jtfExpressao.setText(vl);

}

Código Evento do botão // código continua ...

private void jbCalcularActionPerformed(java.awt.event.ActionE- vent evt) {

calculadoraController.calcular(jtfExpressao.getText()); }

// código continua ...

Por fim, deve-se modificar a classe principal (main) do projeto, para que ela exiba e utilize a CalculadoraController. Veja a modificação necessária, no código, a seguir, e a execução da aplicação na figura 36.

package com.senai.calculadora;

import com.senai.calculadora.mvc.CalculadoraController; public class Main {

public static void main(String[] args) {

CalculadoraController calculadoraController = new CalculadoraController(); calculadoraController.show();

} }

Figura 36: Classe CalculadoraView

Nesta unidade você acompanhou o estudo de caso de um objeto de calcular. Na próxima unidade de estudo você terá uma visão geral sobre entradas e saídas, aprenderá a manipular dados e acompanhará um estu- do de caso. Bons estudos!

Unidade de

estudo 5

Seções de estudo

Seção 1 – Visão geral

Seção 2 – Manipulando arquivos Seção 3 – Estudo de caso: editor de texto

Entrada e Saída

SEÇÃO 1

No documento Programação_Orientada_ObjetoII (páginas 64-70)

Documentos relacionados