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 otamanho 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 ainterface 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 gerenciadorGridLayout 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