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
-
Artigo
-
Artigo
-
Artigo