Litebase 1.3 e SuperWaba - Parte 04

Dando continuidade a Litebase 1.3 e SuperWaba.

Litebase 1.3 e SuperWaba – Parte 04

Wellington Pinto de Oliveira

 

Dica 5- Dica de desempenho

 

Figura 4 - Layout do Container FrmListPessoa

Como a classe FrmListPessoa não foi implementada crie esta classe e implemente o código segundo a Listagem 10. O layout final é semelhante ao exibido na Figura 4;

 

package samples;

 

import waba.ui.Button;

import waba.ui.Grid;

import waba.ui.Event;

import waba.ui.ControlEvent;

import waba.ui.MessageBox;

public class FrmListPessoa extends waba.ui.Container {

 

  Grid grid;

  Button btAlterar, btInsert,btDelete;

 

  public FrmListPessoa() {

  }

 

  public void onStart() {

//Embora o MainWindow seja branco temos que preencher o container

//com a mesma cor, senão teremos um quadrado cinza ou azul

this.setBackColor(waba.fx.Color.WHITE);

 

//Comece inserindo os objetos na base do formulário

add(btDelete = new Button("Excluir"), RIGHT - 2, BOTTOM);

add(btAlterar = new Button("Alterar"), BEFORE - 2, SAME);

add(btInsert = new Button("Inserir"), BEFORE - 2, SAME);

 

//Para construir um grid é preciso de um array de titulos,

//um de tamanhos e outro de alinhamento

String[] nomes = new String[] { "RG", "Nome" };

int[] tamanhos = new int[] { 0, 320 };

int[] alinhamento = new int[] { Grid.LEFT, Grid.LEFT };

//Apenas adicione o gride ao container

add(grid = new Grid(nomes, tamanhos, alinhamento, false));

//Este gride deve estar ancorado a parte superior da tela

//a Esquerda do formulário, com o Fill estou preenchedo toda a

//tela na horizontal e utilizamos o FIT par preencher do top

//da tela até o primeiro objeto encontrado analisando de cima para baixo.

         grid.setRect(LEFT + 2, TOP + 2, FILL, FIT);

 

//Executo o método que carrega os dados

onAdd();

  }

 

  public void onAdd() {

// Gerando os dados

String sql = "SELECT COD_RG,NOME FROM PESSOAS ORDER BY NOME";

//O grid recebe um Array de duas dimensões

String[][] dados = Pessoas.getData(sql);

//Não podemos jogar algo nulo no Grid, se a consulta não retornar

//valor o litebase retorna null

if (dados != null)

grid.setItems(dados);

else

grid.clear();

  }

 

  public void onEvent(Event event) {

//Podemos ter vários eventos em uma tela, todo evento possui

//um tipo diferente, est tipo é um número único, então por motivos

//de desenpenho já iniciamos com um Switch

switch (event.type) {

//Todo botão levant um evento do tipo PRESSED

case ControlEvent.PRESSED:

//Agora basta saber qual objeto levantou o evento, para isso

//basta comparar o objeto target com os objetos criados

if (event.target == this.btInsert)

{

this.parentWindow.swap(new FrmEditPessoa());

//execute a ação e saia com um return;

return;

}

if (event.target == this.btAlterar) {

FrmEditPessoa frm = new FrmEditPessoa();

Pessoas buffer = new Pessoas();

 

//Se o usuário não selecionou nada no grid exiba a mensagem e saia da execução

if (grid.getSelectedRow() < 0) {

new waba.ui.MessageBox("Mensagem", "Selecione um item do Grid").popupBlockingModal();

return;

}

//Um grid armazena um array de duas dimenções, como armazenamos

//a chave cod_rg na coluna 0 então podemos facimente resgatar este

//valor e carregar um variável buffer

if (buffer.loadByRG(grid.getSelectedItem()[0])) {

//Se a pessoa for carregada então passo este valor para o formulário seguinte

//e exibo tal container, lembre-se a pessoa já está carregada, não é preciso

//carregar novamete no outro formulário

frm.pessoa = buffer;

this.parentWindow.swap(frm);

}

else

new waba.ui.MessageBox("Mensagem", "Problemas ao carregar dados").popupBlockingModal();

return;

}

if (event.target == this.btDelete) {

Pessoas buffer = new Pessoas();

 

if (grid.getSelectedRow() < 0) {

new waba.ui.MessageBox("Mensagem","Selecione um item do Grid").popupBlockingModal();

return;

}

//Sempre que for apagar uma informação pergunte ao usário se ele

//está certo da ação que pretende tomar

MessageBox msg = new MessageBox("Mensagem", "Deseja realmente exluir| estas informações?",new String[] {"Sim","Não"});

msg.popupBlockingModal();

if(msg.getPressedButtonIndex() == 1)

return;

//similar ao exemplo do botão anterior, porem neste caso nenhum container será

//chamado, apenas execute o método delete da Pessoa e recarregue o Grid

if (buffer.loadByRG(grid.getSelectedItem()[0]))

if(buffer.delete())

onAdd();

else

new waba.ui.MessageBox("Mensagem", "Problemas ao excluir dados").popupBlockingModal();

else

new waba.ui.MessageBox("Mensagem", "Problemas ao carregar dados").popupBlockingModal();

return;

}

break;//FIM DO CASE PRESSED

}//FIM DO SWITCH

  }

}

Listagem 10 - FrmListPessoa

Este formulário é bem simples, chamo a atenção apenas para o uso do FIT, procure mais informações nos materiais recomendados, pois este atributo se for usado de forma errada pode gerar exception.

Para terminar o pequeno exemplo precisamos apenas implementar o container FrmEditPessoa, o layout desta tela é semelhante ao exibido na Figura 5.

 

 

Figura 5 - Layout do Container FrmEditPessoa

 

Para isso crie a classe FrmEditPessoa e digite o código exibido na Listagem 11.

 

package samples;

 

import waba.ui.*;

 

public class FrmEditPessoa extends Container {

  //Como este formulário tem a função de alterar valores da entidade

  //Pessoa então devemos criar uma variável para armazenar tal entidade

  public Pessoas pessoa = new Pessoas();

 

  //Objetos de interface

  public Edit edNome, edRg, edData;

  public Button btSalvar, btVoltar, btCalendario;

  public Calendar calendario = new Calendar();

 

  public void onStart() {

//Embora o MainWindow seja branco temos que preencher o container

//com a mesma cor, senão teremos um quadrado cinza ou azul

this.setBackColor(waba.fx.Color.WHITE);

 

add(new Label("RG:"), LEFT + 2, TOP + 3);

add(edRg = new Edit(""), AFTER + 2, SAME);

edRg.setMode(Edit.CURRENCY);

 

add(new Label("Nome:"), LEFT + 2, AFTER + 2);

add(edNome = new Edit(""), AFTER + 2, SAME);

 

Label lbBuffer;

add(lbBuffer = new Label("Data Nascimento:"), LEFT + 2, AFTER + 2);

add(btCalendario = new Button("..."), RIGHT - 2, AFTER + 2);

add(edData = new Edit());

//Novamente utilizamos o FIT, este atributo se for usado de forma incorreta

//gera exception, procure mais informações sobre FIT e FILL

edData.setRect(LEFT + 2, AFTER + 2, FIT, PREFERRED, lbBuffer);

//O Edit edData será usado apenas para exibir uma data

edData.setEnabled(false);

add(this.btVoltar = new Button("Voltar"),LEFT + 2,BOTTOM);

add(this.btSalvar = new Button("Salvar"),AFTER + 2,SAME);

onAdd();

  }

 

  public void onAdd()

  {

this.calendario.setSelectedDate(this.pessoa.datNascimento);

this.edData.setText(this.pessoa.datNascimento.toString());

this.edNome.setText(this.pessoa.nome);

this.edRg.setText(this.pessoa.codRg);

  }

 

  public void onEvent(Event event) {

switch (event.type) {

  case ControlEvent.PRESSED:

if (event.target == this.btCalendario) {

//Abre o calendário e espera ser fechado para conginuar o

//processamento

this.calendario.popupBlockingModal();

return;

}

if (event.target == this.btSalvar) {

//Com a classe Pessoa implementada fica fácil alterar informações

if(this.pessoa.save())

new MessageBox("Mensagem","Salvo com sucesso").popupBlockingModal();

else

new MessageBox("Mensagem","Problemas ao salvar").popupBlockingModal();

return;

}

if (event.target == this.btVoltar) {

//O Container não possui o método swap(), logo ele precisa

//acessar o ParentWindow que o contem para invocar o swap()

this.parentWindow.swap(new FrmListPessoa());

return;

}

break;

//Evento que ocorre quando uma janela é fechada

case ControlEvent.WINDOW_CLOSED:

if (event.target == this.calendario){

//Se ele não selecionar data e clicar em cancel

//o valor será nulo, então sempre valide a informação

if(this.calendario.getSelectedDate() != null){

this.edData.setText(this.calendario.getSelectedDate().toString());

this.pessoa.datNascimento = this.calendario.getSelectedDate();

}

return;

}

break;

//Evento que ocorre quando uma key é pressionada

case KeyEvent.KEY_PRESS:

if(event.target == this.edNome){

this.pessoa.nome = edNome.getText();

return;

}

if(event.target == this.edRg){

this.pessoa.codRg = edRg.getText();

return;

}

break;

}

  }

}

Listagem 11 - Código do container FrmEditPessoa

 

 

 

Artigos relacionados