Mini-curso          TotalCrossDesenvolvimento de Aplicativos   para Dispositivos Móveis             Prof. Nécio de Lima Ve...
Agenda   Parte 1 (Introdução)        – A computação móvel;        – Tecnologias;        – O TotalCross (A plataforma);   ...
Parte I: IntroduçãoA Computação MóvelTecnologiasTotalCrossNoções de GUI
Computação                       Móvel• Tema bastante abrangente;• Pode representar um novo paradigma:     – Mais acesso a...
Computação                 Móvel• Principais problemas:     –   Erros em Transmissões Sem Fio;     –   Energia;     –   In...
Computação                  Móvel• Aplicações e Serviços:      – Pessoais;      – Corporativas;      – Financeiras;      –...
Exemplos de Personal Digital        Assistant
Exemplos de Personal Digital        Assistant
Sobre os PDA’s   Família:               Empresas que adotam:       Palm OS;               CELEPAR       Pocket PC;   ...
Tecnologias   JME;   Embedded Visual C++; (IDE p/ PocketPC);   .NET;   CodeWarrior;   NSBasic;   PocketStudio;   HB...
O TotalCross           (A plataforma)1.   Visão Geral (características, vantagens competitivas e     características técni...
Visão Geral   O que é TotalCross? (Um pouco de história)    É  uma plataforma para desenvolvimento de      aplicações pa...
Visão Geral   Códigos Java (com SDK próprio);   Plataformas suportadas:       iPhone (1.1.4);       BlackBerry (4.3.0)...
Visão Geral   Características da Máquina Virtual:        Possui seus próprios bytecodes (proprietário);        Suas cla...
Visão Geral   Suporte a Threads:       Possui suporte nativo à preempção;       Não suporta, por enquanto, concorrência...
Visão Geral   Mais Recursos:    –   Gráficos de Linha e Barra;    –   Gerenciamento de conexões;    –   Manipulação de Câ...
Especificações Técnicas   Recursos básicos:    – Qualquer IDE Java;    – Depuração com Applet;    – Rica em GUI;●   Recur...
Especificações Técnicas   Manipulação de dados:       Classe File para manipulação de arquivos (cartões SD e MMC);     ...
Especificações Técnicas   Requisitos Mínimos:        O Kit de Desenvolvimento TotalCross (SDK) pode ser instalado em Win...
O TC estará no censo 2010
O SDK Licença do SDK: LGPL V 3.0; Licença da VM: Versão DEMO;     80 horas ininterruptas;     Esse tempo é atualizado ...
O SDK   Estrutura de diretórios:     Dist   (classes base e ferramentas de deploy)           + samples (exemplos)       ...
Processos de compilação, distribuição           e instalação (introdução)   O desenvolvimento é idêntico ao de Java;   P...
Processos de compilação, distribuição                 e instalação   Criando uma primeira aplicação, o “Hello World”:    ...
Processos de compilação, distribuição                e instalação Compilação em linha de comando:javac -target 1.1 -sourc...
Processos de compilação, distribuição                e instalação Para executar uma aplicação em TC, use  como ponto de p...
A Classe Launcher   É uma aplicação JAVA;   Formato básico:        totalcross.Launcher [optional arguments] <main class>...
Processos de compilação, distribuição                e instalação   O TC facilita o processo de distribuição, através da ...
Processos de compilação, distribuição                e instalação   O tc.Deploy criará para tipo de distribuição    uma p...
Opções da classe Deploy passadas    através do construtor de MainWindowOpção   Valor padrão   Código   Resultado
Opções da classe Deploy            passadas através do construtorOpção   Valor padrão   Código   Resultado
Instalando e configurando         a ferramenta Eclipse   Podemos fazer isso    em qualquer    versão do eclipse;   Vamos...
Instalando e configurando             a ferramenta Eclipse   Adicione uma “User    Library” (nome    sugerido: TCLibrary)...
Instalando e configurando   a ferramenta Eclipse   A aplicação deve    ficar com DUAS    bibliotecas:     JRE do Java;  ...
Instalando e configurando   a ferramenta Eclipse   Agora, vamos testar:     Crieuma classe Hello.java (conforme      vim...
Instalando e configurando   a ferramenta Eclipse
Instalando e configurando   a ferramenta Eclipse   Se o resultado    deve ser este =>   Parabéns!   Agora, estamos    c...
Visão GeralInterface Gráfica(GUI)
Controles     (Estrutura da classe MainWindow)   Método initUI();   Método onExit();   Informações Importantes:    O  ...
Adicionando Controles Os controles apenas podem ser  adicionados em Containers e suas  subclasses (como a MainWindow); P...
Métodos relacionados ao     posicionamento e adição de controles   setRect:     (x, y, width, height);     (Rect r);   ...
Um pouco de Prática   Adicione Label’s para mostrar as    coordenadas de direções:     Norte,  Sul, Leste, Oeste, Nordes...
Reflexão sobre o exercício   Agora, com o exercício pronto, faça:     Tente aumentar o tamanho da tela;     Algo deu er...
Solução:          Coordenadas relativas   Para a coordenada X:     LEFT:  O controle é posicionado na posição 0      hor...
Coordenadas relativas   Para a coordenada Y:     TOP:  Coloca o controle na posição 0 vertical;     BOTTOM: Coloca o co...
Coordenadas relativas   Largura:     PREFERRED:  o controle é ajustado conforme sua      MELHOR largura;       • É usado...
Coordenadas relativas   Altura:     PREFERRED:      o controle será desenhado      com a melhor altura possível;     FI...
Coordenadas relativas Observações:   Antesde chamar o setRect de um controle,   você deve, preferencialmente, adicioná-l...
Praticando...   Que tal refazer o exercício anterior,    agora da maneira correta?
Eventos   Representam todas as atividades    entre o usuário e a aplicação;   Quando um usuário interage com o    progra...
A Classe Event   O TC possui 4 classes para manipulação    de eventos:     ControlEvent;     PenEvent;     KeyEvent;  ...
Exemplopackage br.sinfo.necio.demos;import totalcross.ui.Label;import totalcross.ui.MainWindow;import totalcross.ui.event....
Tipos mais comuns de eventos    manipulados pelo ControlEvent PRESSED: é chamado quando acontece  um PEN_DOWN, PEN_UP ou ...
Parte II: Desenvolvimento de Aplicações GráficasG.U.I.Classes Utilitárias
Interface Gráfica com o Usuário:                Controles Básico●   Estão embutidos no pacote: totalcross.ui;●   São eles:...
Controle básico: Button●   Suporta textos multi-linhas e imagens    misturados;●   Possui 4 estilos de borda:    ●   BORDE...
Controle básico: Button●   Possui um campo estático    commonGap;●   Possui o método    setPressedColor;●   A cor de fundo...
Controle básico: Edit●   Trabalha com textos oriundos do teclado ou da área de escrita    manual (grafitti);●   Permite se...
Controle básico: Edit●   Possui os membros:    ●   overwrite (escrita        com INSERT ligado);    ●   autoSelect (ao    ...
Controle básico: Label●   Texto estático;●   Pode possuir múltiplas linhas, separadas    pelo caractere ‘n’;●   Possui trê...
Controle básico: Label●   Possui os métodos:    ●   set3d;    ●   setInvert;    ●   setText;●   Como ele é multi-linha, as...
Controle básico: Label    Prática:        Crie um exemplo que mostre labels (em         linhas separadas) com as seguint...
Controle básico: Check   Serve como uma caixa de checagem;   O texto é alinhado à direita, caso não    queira isso atrib...
Controle básico: Radio e             RadioGroupControler●   O Radio permite escolher alternativas pré-    definidas;●   As...
Controle básico: Radio e              RadioGroupControler●   No RGC podemos:    ●   Verificar o índice do Radio selecionad...
Prática●   Exemplifique o uso destes componentes criando um    tipo de grupo com pelo menos 2 radios, conforme a    figura;
Controle básico: ComboBox●   Controle útil quando se precisar    selecionar um item em um conjunto de    itens;●   Possui ...
Controle básico: ComboBox●   Atributos:     ●  fullHeight - boolean;     ●  fullWidth - boolean;●   Métodos:     ●  setBac...
Controle básico: ComboBox●   Métodos:                          ●   Exemplo:    ●   getSelectedItem();    ●   getSelectedIn...
Controle Básico: ListBox●   Permite selecionar um item de uma lista de    múltiplas linhas;●   Não é possível selecionar m...
Controle Básico: ListBox●   Métodos:    ●   insert (Object item, int index);    ●   setItemAt (int i, Object o);    ●   si...
Controle Básico: ListBox●   Métodos de remoção:        ●   Exemplo:    ●   remove(int        itemIndex);    ●   remove(Obj...
Controle Básico: MultiEdit●   É basicamente, um Edit que suporta múltiplas    linhas;●   Construtores:    ●   MultiEdit(in...
Controle Básico: MultiEdit●   Métodos:    ●   getNumberOfTextLine        s();    ●   Manipulação de        scrollbars:    ...
Controle básico: Grid●   Controle usado para mostrar tabulação de dados    com uma matriz de String;●   Opcionalmente é po...
Controle básico: Grid●   As colunas podem ser redimensionadas pelo    usuário;●   Estilos de cores personalizáveis;●   Ger...
Controle básico: Grid●   Construtores:     ● Grid(String[] captions, boolean checkEnabled);    ●  Grid(String[] captions, ...
Controle básico: Grid●   Métodos:    ●   String[] getSelectedItem();    ●   isChecked:(int lineIndex);    ●   setChecked(i...
Controle básico: Grid●   Métodos da classe CellControler:    ●   Color getBackColor(int row, int col);    ●   Color getFor...
Controle básico: Grid    ●   captionsBackColor;    ●   firstStripeColor;    ●   secondStripeColor;    ●   drawStripe;    ●...
A classe Window●   Já sabemos a utilidade da MainWindow;     ●  Esta, pode chamar uma janela (Window), que pode chamar    ...
A classe Window●   Recursos:    ●   setTitle;    ●   setBorderStyle, valores válidos:         –   NO_BORDER; RECT_BORDER; ...
A classe Window●   Métodos:    ●   onClickOutside(int x, int y);         –   Temos duas opções de manuplação:             ...
A Classe Window●   Prática: Observe as figuras e tente fazer    igual;
Interfaces de Diálogos●   São chamadas quando há uma    mensagem informativa ou uma requisição    específica de entrada;● ...
Interface de Diálogos:                   MessageBox●   Diálogo simples para mostrar um texto    com alguns botões personal...
Interface de Diálogos:                        MessageBox●   Possui apenas 3    métodos:    ●   getPressedButtonIndex      ...
Interface de Diálogos:                     InputBox●   Diálogo simples usado para capturar uma entrada    (texto) de um us...
Interface de Diálogos:                      InputBox●   Métodos:    ●   getPressedButtonIndex();    ●   getEdit();    ●   ...
Interface de Diálogos:                            KeyboardBox●   Teclado virtual para dispositivos    touchscreen;●   Seu ...
Interface de Diálogos:                            CalculatorBox●   Uma caixa prontinha com uma    calculadora básica com d...
Interface de Diálogos:                            CalendarBox●   Mostra um pequeno calendário;●   É mostrado com o dia atu...
Imagens●   Constituem imagens retangulares;●   O TC suporta imagens de 24bpp;    ●   Apenas o formato PNG e JPEG;    ●   P...
Imagens●   Construtores:    ●   Image(int width, int        height);    ●   Image(byte[]        fullDescription);    ●   I...
Assim...●   Estamos praticamente aptos a criar nossa primeira aplicação    de verdade;●   Eis algumas opções:    ●   Mini-...
Classes utilitárias●   Podemos encontrar nestes pacotes (util e    sys) os seguintes recursos:    ●   Manipulação de Datas...
O pacote util: manipulação de data●   Manipula o calendário Gregoriano com o intervalo    de 1/1/1000 até 31/12/2999.●   C...
O pacote util: manipulação de data●   Métodos:    ●   advance(int numberDays);         –   Caso o parâmetro seja negativo ...
O pacote util: a classe Vector●   Implementa um array dinâmico de objetos;●   Não se pode acessar os elementos    diretame...
O pacote util: a classe Vector●   Construtores:    ●   Vector() : tamanho default de 8;    ●   Vector(int size) : size >= ...
O pacote util: a classe Vector    ●   De Indexação:         –   indexOf(Object obj, int startIndex);         –   indexOf(O...
O pacote util: a classe IntVector●   Idem ao anterior, com a diferença que agora    teremos um vetor de números inteiros;●...
O pacote util: a classe Hashtable●   Implementa uma tabela hash com chaves    e valores;●   Possui 2 construtores:    ●   ...
O pacote util: a classe Hashtable●   Métodos para retirar um elemento:    ●   get(Object key);    ●   get(int hash);●   Mé...
O pacote util: a classe IntHashtable●   Idem ao anterior, com a diferença que    agora teremos uma tabela hash de    númer...
O pacote util: a classe Random●   É uma operação linear para gerar    números aleatórios no intervalo de    [0,231];●   O ...
O pacote util: a classe Random●   A classe possui apenas 4 métodos:    ●   nextInt(int n);    ●   nextDouble();    ●   bet...
O pacotetotalcross.sys
O pacote sys: a classe Time●   Especifica uma data e hora;●   O ano possui 4 dígitos e a hora usa    notação de 24 horas c...
O pacote sys: a classe Time●   Campos e faixas:    ●   Ano: 4 dígitos;    ●   Mês: de 1 a 12;    ●   Dia: de 1 a último di...
O pacote sys: a classe Time●   Construtores:    ●   Time(); - data e hora atual;    ●   Time(int year, int month, int day,...
O pacote sys: a classe Time●   Métodos:    ●   De comparação: equals(Object o);    ●   getTimeLong();    ●   toIso8601(); ...
O pacote sys: a classe                  Convert●   Contém métodos para conversão de objetos e tipos    básicos;●   É uma c...
O pacote sys: a classe                   Convert    ●  toString(double val, int decimalCount);     ● toString(int i);     ...
O pacote sys: a classe                    Convert●   Arrays:    ●   cloneStringArray(String[] strs);    ●   toStringArray(...
O pacote sys: a classe                   Convert    ●   Ordenação:        –   qsort(Object[] items, int first, int last); ...
Parte III:O SGDB LiteBaseNoções Básicas e Visão Geral
O Litebase●   É um “SGDB” para TotalCross;●   Usa a linguagem SQL para manipulação e criação    de dados (DDL e DML);●   E...
Limitações e uso●   O nome da tabela é limitado em 23    caracteres;●   Pode-se criar acima 99 índices;●   Índices usados ...
Limitações e uso●   Funções de agregação:    ●   max, min, avg, sum, count e order by;●   O Join é suportado;    ●   Excet...
Limitações e uso●   É possível armazenar usando o memory    card;●   É possível usar multi-threads para várias    conexões...
Tipos de dados●   Short: Java short [-32768 +32767];●   INT: Java int [-2.147.483.648 +2.147.483.647]●   LONG: Java long [...
Entendendo seu funcionamento... ●    1º. Criar o driver de conexão:LitebaseConnection driver = LitebaseConnection.getInsta...
Entendendo seu funcionamento...●   3º. Inserir valores:driver.executeUpdate("INSERT INTO TBTeste VALUES (1, 30.0, 31)");dr...
Um pequeno exemplo...
Concluindo ...  Muito Obrigado eagora é com vocês!!!!!!!
Próximos SlideShares
Carregando em…5
×

Minicurso de TotalCross e Litebase

3.559 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.559
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
69
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Minicurso de TotalCross e Litebase

  1. 1. Mini-curso TotalCrossDesenvolvimento de Aplicativos para Dispositivos Móveis Prof. Nécio de Lima Veras
  2. 2. Agenda Parte 1 (Introdução) – A computação móvel; – Tecnologias; – O TotalCross (A plataforma); – Visão Geral (GUI); Parte 2 (Desenvolvendo) – Interface Gráfica com o Usuário; – Classes Utilitárias; Parte 3 (Persistência de Dados) – Litebase;
  3. 3. Parte I: IntroduçãoA Computação MóvelTecnologiasTotalCrossNoções de GUI
  4. 4. Computação Móvel• Tema bastante abrangente;• Pode representar um novo paradigma: – Mais acesso a serviços sem fronteiras físicas (localização); – “Acesso à Informação em qualquer lugar e a qualquer momento”;• Dispositivos: – Laptop e Palmtop; – PDAs; – Celulares;• Infra-estrutura: – Redes Internas; – Redes Externas; – Redes Ad-hoc;
  5. 5. Computação Móvel• Principais problemas: – Erros em Transmissões Sem Fio; – Energia; – Interface com os dispositivos; – Capacidade dos dispositivos; – Segurança; – Necessidades de adaptações p/ o desenvolvedor;
  6. 6. Computação Móvel• Aplicações e Serviços: – Pessoais; – Corporativas; – Financeiras; – Ciências Médicas; – Policiamento e Segurança; – Militares; – Informações em Geral; – Entretenimento; – Comércio Eletrônico Móvel (M-Commerce); – Serviços baseados em localização; Fonte: T&C Amazônia, ano 1, núm 2 (2003).
  7. 7. Exemplos de Personal Digital Assistant
  8. 8. Exemplos de Personal Digital Assistant
  9. 9. Sobre os PDA’s Família:  Empresas que adotam:  Palm OS;  CELEPAR  Pocket PC;  Distribuidores:  SmartPhone; • SKOL, BRAHMA, SCHIN e COCA-  Pocket Linux; COLA;  Restaurantes diversos (HABIBS);  Clubes de Futebol;  IBOPE;  IBGE;
  10. 10. Tecnologias JME; Embedded Visual C++; (IDE p/ PocketPC); .NET; CodeWarrior; NSBasic; PocketStudio; HB++; Android; SuperWaba => TotalCross;
  11. 11. O TotalCross (A plataforma)1. Visão Geral (características, vantagens competitivas e características técnicas);2. O SDK;3. Compilando, distribuindo e instalando suas aplicações;4. Instalando e configurando a ferramenta Eclipse;
  12. 12. Visão Geral O que é TotalCross? (Um pouco de história) É uma plataforma para desenvolvimento de aplicações para PDAs e smartphones.  Usa o conceito “write once run anywhere”;  Substitui o SuperWaba; • MV totalmente NOVA; • P/ migração: SW2TC;
  13. 13. Visão Geral Códigos Java (com SDK próprio); Plataformas suportadas:  iPhone (1.1.4);  BlackBerry (4.3.0);  Palm OS (5, 3 e 4 – sem suporte a multithread);  Windows CE (3.0, .NET, Windows Mobile 5 e 6): • Pocket PC (ARM, SH3 e MIPS); • PPC ARM; • HPC 2000 ARM;  Windows 2000;  Linux;  Navegadores (Java applets – JDK 1.1 ou superior);
  14. 14. Visão Geral Características da Máquina Virtual:  Possui seus próprios bytecodes (proprietário);  Suas classes são otimizadas para economizar espaços (ex: os pool’s são compartilhados entre todas as classes distribuídas); • As classes são comprimidas usando o zlib;  Possui suporte a aplicações headless (basta estender a interface totalcross.MainClass);  Possui manipulação especial de arrays (verificações de looping);  Novos recursos para o GC (dontFinalize); Inconvenientes:  Não suporta float, apenas double (limitação de não possuir um co-processador matemático);  Quer dizer que não posso usar variáveis do tipo float? • Sim, pode, pois o compilador irá traduzir;
  15. 15. Visão Geral Suporte a Threads:  Possui suporte nativo à preempção;  Não suporta, por enquanto, concorrência e nem sincronização; • Porém, é possível “escutar” um socket, ou um arquivo, ou ainda, percorrer uma tabela em background;  Usar threads para interface gráfica, por enquanto, é inseguro e não recomendado;  É utilizado principalmente para I/O; Gráficos, Paleta e Cores:  As imagens são armazenadas em 24 bits (RGB);  Possui suporte à rotação de telas;  As cores são representadas pelo formato: 0xRRGGBB (null = -1);
  16. 16. Visão Geral Mais Recursos: – Gráficos de Linha e Barra; – Gerenciamento de conexões; – Manipulação de Câmera (windows mobile); – Fontes de tamanho ilimitado (com anti-aliasing); – Suporte à rotação de telas; Segurança:  Decompilação impossível;  Faça Backups, pois também não é possível decompilar uma aplicação distribuída;  Suporte a SSL;  Algoritmos nativos de criptografia;
  17. 17. Especificações Técnicas Recursos básicos: – Qualquer IDE Java; – Depuração com Applet; – Rica em GUI;● Recursos avançados: ● Suporte à UNICODE; ● GPS; ● XML; ● Captura de Vídeo, Fotos e Voz; ● Desenvolvimento de Jogos; ● Suporte à leitor de código de barras; ● Biblioteca Zlib; ● Suporte à múltiplos formatos de imagens: BMP, JPEG, PNG e GIF; ● Suporte a HTML;
  18. 18. Especificações Técnicas Manipulação de dados:  Classe File para manipulação de arquivos (cartões SD e MMC);  Classe PDBFile para manipulação de arquivos PDB (Palm Database) em todas as plataformas alvo;  SGDB c/ Litebase; Conectividade:  Suporte a Socket para TCP/IP, IR, Porta Serial, USB e Bluetooth;  Possui ServerSocket;  Suporte aos protocolos: SMS, HTTPS, FTP e SMTP;  Discagem de números;  WebServices;
  19. 19. Especificações Técnicas Requisitos Mínimos:  O Kit de Desenvolvimento TotalCross (SDK) pode ser instalado em Windows 98/ ME/NT/2000/XP, Linux e Mac OS-X.  Pentium II ou equivalente com 128Mb de memória disponível.  Mínimo de 200 Mb livres em disco .  JDK 1.6 ou superior (utilizado durante o empacotamento da aplicação). Imagens:
  20. 20. O TC estará no censo 2010
  21. 21. O SDK Licença do SDK: LGPL V 3.0; Licença da VM: Versão DEMO;  80 horas ininterruptas;  Esse tempo é atualizado a cada 5s;  É possível reiniciar esse tempo com um Hard Reset;  E no Windows?
  22. 22. O SDK Estrutura de diretórios:  Dist (classes base e ferramentas de deploy) + samples (exemplos) + vm (máquinas virtuais)+ docs (documentação)+ etc (imagens, launchers, arquivos de assinaturas, tools)+ src (fontes dos exemplos)
  23. 23. Processos de compilação, distribuição e instalação (introdução) O desenvolvimento é idêntico ao de Java; Porém existem diferenças e cuidados:  Superclasse (MainWindow) ou a interface MainClass;  Execução: a Classe Launcher;  Por conveniência, existe o pacote totalcross.lang (ex.: String e Object). Cuidado com as classes Wrapper;  O TC é apenas compatível com o formato de arquivos de classe Java 1.1, por tanto, o JDK 1.1 ou 1.2; • Linha de comando: “-target 1.1 –source 1.2”; • Para as IDE’s Java deve-se usar o level de 1.3;
  24. 24. Processos de compilação, distribuição e instalação Criando uma primeira aplicação, o “Hello World”:  1º. Passo: Instalar o SDK do Java;  2º. Passo: Instalar o SDK do TC;  3º. Passo: Configurar o classpath [opcional] p/ o Java e TC;  4º. Passo: Implementar!package br.sinfo.necio.demos;import totalcross.ui.*;public class FirstHello extends MainWindow {public void initUI(){ add (new Label("Hello World!"),0,0); }}
  25. 25. Processos de compilação, distribuição e instalação Compilação em linha de comando:javac -target 1.1 -source 1.2 FirstHello.java Lembre-se, caso você NÃO configure o CLASSPATH, ficaria assim:javac -classpath /opt/totalcrossSDK/dist/tc.jar -target 1.1 -source 1.2 FirstHello.java
  26. 26. Processos de compilação, distribuição e instalação Para executar uma aplicação em TC, use como ponto de partida a classe Launcher;java -classpath .;%CLASSPATH% totalcross.Launcher FirstHello Resultado:
  27. 27. A Classe Launcher É uma aplicação JAVA; Formato básico: totalcross.Launcher [optional arguments] <main class> Argumentos:  Resolução de Tela (/scr);  Definição de cores (/bpp);  Estilo de interface com o usuário (/uiStyle);  Características de dispositivos: • /penlessDevice; • /keypadOnly;
  28. 28. Processos de compilação, distribuição e instalação O TC facilita o processo de distribuição, através da classe tc.Deploy: java tc.Deploy FirstHello –all  Lembre-se do CLASSPATH ! O argumento “-all” define os tipos de distribuição, que podem ser:  palm ou –palmos;  ce ou –wince;  win32;  bb ou blackberry;  applet ou html;
  29. 29. Processos de compilação, distribuição e instalação O tc.Deploy criará para tipo de distribuição uma pasta chamada install contendo:  Os instaladores;  Os executáveis (se for o caso);  As bibliotecas necessárias; Exemplo do Windows:  Tamanho padrão de tela: 240x320;  Personalização: /scr x,y,width, heidht;
  30. 30. Opções da classe Deploy passadas através do construtor de MainWindowOpção Valor padrão Código Resultado
  31. 31. Opções da classe Deploy passadas através do construtorOpção Valor padrão Código Resultado
  32. 32. Instalando e configurando a ferramenta Eclipse Podemos fazer isso em qualquer versão do eclipse; Vamos lá:  Inicie um projeto Java normal;  Feito isso, vá nas propriedades do projeto, na aba Libraries e adicione uma “Library”:
  33. 33. Instalando e configurando a ferramenta Eclipse Adicione uma “User Library” (nome sugerido: TCLibrary); Depois, adicione um Jar (“Add JARs”);  Você deve adicionar o arquivo tc.jar (pasta dist do TOTALCROSS_HOM E; Depois, configure o Source e o JavaDoc; Feito isso, deve ficar assim:
  34. 34. Instalando e configurando a ferramenta Eclipse A aplicação deve ficar com DUAS bibliotecas:  JRE do Java;  TCLibrary; Não esqueça de também configurar o compilador com o nível 1.3;
  35. 35. Instalando e configurando a ferramenta Eclipse Agora, vamos testar:  Crieuma classe Hello.java (conforme vimos antes); • Não esqueça de que a sua superclasse é a MainWindow;  Personalizaremos uma configuração no “Run Dialog”, com: • A classe mãe; • Argumentos;
  36. 36. Instalando e configurando a ferramenta Eclipse
  37. 37. Instalando e configurando a ferramenta Eclipse Se o resultado deve ser este => Parabéns! Agora, estamos com tudo pronto para iniciar o desenvolvimento de aplicações!
  38. 38. Visão GeralInterface Gráfica(GUI)
  39. 39. Controles (Estrutura da classe MainWindow) Método initUI(); Método onExit(); Informações Importantes: O método initUI é abstrato de um Container; • Deve-se inicializar TODAS as UI’s nele; O método onExit apenas é chamado em circunstâncias normais de saída; • Qualquer saída anormal, o método NÃO é chamado;  Para alterar títulos e estilos é aconselhável chamá-lo no construtor da classe MainWindow (super);
  40. 40. Adicionando Controles Os controles apenas podem ser adicionados em Containers e suas subclasses (como a MainWindow); Para criar o espaço de visualização do controle existe o método: setRect (x, y, width, height) Exemplo: setRect(10,10,40,20);
  41. 41. Métodos relacionados ao posicionamento e adição de controles setRect:  (x, y, width, height);  (Rect r);  (x, y, width, height, Control relative); add:  (Control, x, y);  (Control, x, y, Control relative);  (Control, x, y, width, height);  (Control, x, y, width, height, Control relative);
  42. 42. Um pouco de Prática Adicione Label’s para mostrar as coordenadas de direções:  Norte, Sul, Leste, Oeste, Nordeste, Noroeste, Sudeste, Sudoeste e CENTRO; O comando para adicionar um label, pode ser:  add(new Label(“N”),60,0, 12, 12);  Ao final deve ficar assim:
  43. 43. Reflexão sobre o exercício Agora, com o exercício pronto, faça:  Tente aumentar o tamanho da tela;  Algo deu errado? JAMAIS devermos definir posição com valores exatos! E agora?
  44. 44. Solução: Coordenadas relativas Para a coordenada X:  LEFT: O controle é posicionado na posição 0 horizontal;  RIGHT: Alinha o controle à direita;  CENTER: Alinha no centro horizontal do Container;  BEFORE: Coloca o controle ANTES do último controle adicionado;  AFTER: Coloca o controle DEPOIS do último controle adicionado;  SAME: Coloca o controle na MESMA coordenada X do último controle adicionado;
  45. 45. Coordenadas relativas Para a coordenada Y:  TOP: Coloca o controle na posição 0 vertical;  BOTTOM: Coloca o controle na base do Container;  CENTER: centraliza verticalmente o controle no Container;  BEFORE: Coloca o controle ANTES do último controle adicionado;  AFTER: Coloca o controle DEPOIS do último controle adicionado;  SAME: Coloca o controle na MESMA coordenada Y do último controle adicionado;
  46. 46. Coordenadas relativas Largura:  PREFERRED: o controle é ajustado conforme sua MELHOR largura; • É usado, normalmente, para controles de textos;  FILL:o controle usará TODO o espaço disponível da esquerda até o final do Container; • NÃO pode ser usado em conjunto com RIGHT/ CENTER;  SAME: o controle será adicionado com a mesma largura do último adicionado;  FIT: o controle será posicionado entre uma posição específica em X e último controle adicionado;
  47. 47. Coordenadas relativas Altura:  PREFERRED: o controle será desenhado com a melhor altura possível;  FILL: o controle será posicionado da esquerda até o final do Container; • Não pode ser usando em conjunto com BOTTOM/ CENTER;  SAME: o controle usará a mesma altura do último controle adicionado;  FIT: o controle será posicionado entre uma posição específica em Y e último controle adicionado;
  48. 48. Coordenadas relativas Observações:  Antesde chamar o setRect de um controle, você deve, preferencialmente, adicioná-lo ao Container; O controle de coordenadas sempre é relativo à coordenada do controle PAI; Não se usa FIT com largura e altura ao mesmo tempo; Podemos usar refinamentos nas coordenadas relativas, mas sem EXAGERO; • Use no máximo variações entre -5 e +5; • Não é sugerido usar valores acima de 5;
  49. 49. Praticando... Que tal refazer o exercício anterior, agora da maneira correta?
  50. 50. Eventos Representam todas as atividades entre o usuário e a aplicação; Quando um usuário interage com o programa, a VM cria um evento representando a ação e comunicação;
  51. 51. A Classe Event O TC possui 4 classes para manipulação de eventos:  ControlEvent;  PenEvent;  KeyEvent;  Event (classe Pai); Membros da classe Event:  type (código do evento passado);  target (originador do evento);
  52. 52. Exemplopackage br.sinfo.necio.demos;import totalcross.ui.Label;import totalcross.ui.MainWindow;import totalcross.ui.event.Event;import totalcross.ui.event.KeyEvent;public class PenEvent extends MainWindow { Label l; public void initUI(){ add (l = new Label("Pressione uma tecla!"), CENTER, CENTER, PREFERRED, PREFERRED); } public void onEvent(Event e){ if (e.type == KeyEvent.KEY_PRESS){ l.setText("Obrigado pela tecla pressionada!"); l.setRect(CENTER, CENTER, PREFERRED, PREFERRED); } }}
  53. 53. Tipos mais comuns de eventos manipulados pelo ControlEvent PRESSED: é chamado quando acontece um PEN_DOWN, PEN_UP ou um WINDOW_CLOSED; FOCUS_IN e FOCUS_OUT; TIMER: evento especial; WINDOW_CLOSED: para alguns elementos, o evento PRESSED é chamado;
  54. 54. Parte II: Desenvolvimento de Aplicações GráficasG.U.I.Classes Utilitárias
  55. 55. Interface Gráfica com o Usuário: Controles Básico● Estão embutidos no pacote: totalcross.ui;● São eles: ● Button; Edit;Label; Check; Radio; RadioGroupControler; ComboBox; ListBox; MultiEdit; Grid e ToolTip;● Podemos manipular: ● Cores (foregound/backgroup); ● Estados (enabled/disabled);● Lembre-se de que as características dos controles devem ser setadas ANTES do de seu desenho (setRect);
  56. 56. Controle básico: Button● Suporta textos multi-linhas e imagens misturados;● Possui 4 estilos de borda: ● BORDER_NONE; ● NORDER_SIMPLE; ● BORDER_3D; ● BORDER_3D_GRADIENT;● O método setImage NÃO redimensiona o botão;
  57. 57. Controle básico: Button● Possui um campo estático commonGap;● Possui o método setPressedColor;● A cor de fundo de um botão com bordas 3D gradiente, sempre será AZUL;● Exercício: crie um exemplo conforme a imagem:
  58. 58. Controle básico: Edit● Trabalha com textos oriundos do teclado ou da área de escrita manual (grafitti);● Permite selecionar o texto e: copiar, cortar e colar;● Possui dois construtores: com (máscara) e sem argumentos;● Possui os métodos: ● setMaxLength; ● setValidChars; ● setMode (NORMAL, DATE, CURRENCY, PASSWORD, PASSWORD_ALL); ● setEditable; ● setDecimalPlace;
  59. 59. Controle básico: Edit● Possui os membros: ● overwrite (escrita com INSERT ligado); ● autoSelect (ao receber o foco);● Exercício: Implemente o exemplo da figura:
  60. 60. Controle básico: Label● Texto estático;● Pode possuir múltiplas linhas, separadas pelo caractere ‘n’;● Possui três construtores: ● Sem parâmetro; ● Com String texto; ● Com String texto e int align;● O texto é automaticamente ajustado;
  61. 61. Controle básico: Label● Possui os métodos: ● set3d; ● setInvert; ● setText;● Como ele é multi-linha, as barras de rolagem podem ser ativadas: ● scroll(boolean);
  62. 62. Controle básico: Label Prática:  Crie um exemplo que mostre labels (em linhas separadas) com as seguintes características: 1. Simples alinhado à esquerda; 2. Simples centralizado; 3. 3d; 4. Invertido; 5. Com várias linhas.
  63. 63. Controle básico: Check Serve como uma caixa de checagem; O texto é alinhado à direita, caso não queira isso atribua true ao campo leftJustify; Possui os métodos:  isChecked;  setChecked;  setText;
  64. 64. Controle básico: Radio e RadioGroupControler● O Radio permite escolher alternativas pré- definidas;● As opções podem ser agrupadas usando o RadioGroupControler;● O Radio possui 2 construtores: ● Recebendo uma String; ● Recebendo uma String e um Controlador;● O RadioGroupControler NÃO é um controle então NÃO pode ser adicionar a um Container;
  65. 65. Controle básico: Radio e RadioGroupControler● No RGC podemos: ● Verificar o índice do Radio selecionado (getSelectedIndex); ● Selecionar um Radio pelo índice (setSelectedIndex);● Os índices são baseados na ordem como são inseridos;
  66. 66. Prática● Exemplifique o uso destes componentes criando um tipo de grupo com pelo menos 2 radios, conforme a figura;
  67. 67. Controle básico: ComboBox● Controle útil quando se precisar selecionar um item em um conjunto de itens;● Possui 4 construtores, mas apenas 3 são relevantes: ● Um vazio; ● Recebendo um ListBox; ● Outro recebendo um array de Objects;
  68. 68. Controle básico: ComboBox● Atributos: ● fullHeight - boolean; ● fullWidth - boolean;● Métodos: ● setBackgroudColor(); ● add possui três variantes: – add(Object item); – add(Object[] items); - prefira este ao invés de muitas chamadas ao anterior – add(Object[] items, int startAt, int size); ● insert (Object, int index); ● setItemAt (int i, Object o); ● getItemAt (int i) ou indexOf(Object name); ● size();
  69. 69. Controle básico: ComboBox● Métodos: ● Exemplo: ● getSelectedItem(); ● getSelectedIndex(); ● setSelectIndex(int i); ● setSelectedItem (Object name); ● selectLast(); ● Para remover um item, temos 3 opções: – remove(int itemIndex); – remove(Object item); – removeAll(); ● qsort(); ● enableHorizontalScroll();
  70. 70. Controle Básico: ListBox● Permite selecionar um item de uma lista de múltiplas linhas;● Não é possível selecionar múltiplos itens;● Possui 2 construtores: ● Um vazio; ● O outro recebendo Object[];● Podemos adicionar itens pelo método add: ● add(Object item); ● add(Object[] moreItems); - prefira este ao invés de muitas chamadas ao anterior; ● add(Object[] moreItems, int startAt, int size);
  71. 71. Controle Básico: ListBox● Métodos: ● insert (Object item, int index); ● setItemAt (int i, Object o); ● size(); ● getItemAt(int i); ou indexOf(Object name); ● getSelectedIndex() ou getSelectedItem(); ● setSelectedIndex(int i) ou setSelectedItem(Object name); ● selectLast();
  72. 72. Controle Básico: ListBox● Métodos de remoção: ● Exemplo: ● remove(int itemIndex); ● remove(Object item); ● removeAll();● Ordenação: qsort();● Mais métodos: ● enableHorizontalScro ll(); ● setSimpleBorder(bool ean);
  73. 73. Controle Básico: MultiEdit● É basicamente, um Edit que suporta múltiplas linhas;● Construtores: ● MultiEdit(int rowCount, int spaceBetweenLines); ● MultiEdit(String mask, int rowCount, int spaceBetweenLines);● Possui uma vertical scrollbar, mas isso é preciso ser habilitado; ● setScrollbarsAlwaysVisible(boolean asNeeded);
  74. 74. Controle Básico: MultiEdit● Métodos: ● getNumberOfTextLine s(); ● Manipulação de scrollbars: – scrollToBottom(); – scrollToLine(int line); – scrollToTop();● Exemplo:
  75. 75. Controle básico: Grid● Controle usado para mostrar tabulação de dados com uma matriz de String;● Opcionalmente é possível adicionar colunas extras com com um checkBox ao lado esquerdo do Grid;● Funcionalidades: ● Barras de rolagem horizontal e vertical com ajuste automático ao tamanho da tela; ● Fácil interface para o usuário adicionar ou remover informações no próprio Grid; ● Coluna opcional de checagem (para selecionar mais de um linha);
  76. 76. Controle básico: Grid● As colunas podem ser redimensionadas pelo usuário;● Estilos de cores personalizáveis;● Gera eventos (contido na classe GridEvent);● A coluna pode ser editável ou não;● Ordenação da coluna com um click no título;● Se o texto for maior que o tamanho da célula, poderá ser clicado e aparecerá um tooltip com o texto completo;● É possível customizar uma célula com a classe CellControler manipulando: – Cores (back e fore); – Estado (enable/disable);
  77. 77. Controle básico: Grid● Construtores: ● Grid(String[] captions, boolean checkEnabled); ● Grid(String[] captions, int[] widths, int[] aligns, boolean checkEnabled);● Métodos: ● add(String[] item) – apenas UMA tupla; ● add(String[] item, int row); ● clear(); ● del(int row); ● getCellText(int row, int col); ● setCellText(int row, int col, Strint text); ● getItem(int index); - retorna a linha toda; ● getItemsVector(); ● getCheckedRows(); - retorna um IntVector; ● int getSelectedIndex();
  78. 78. Controle básico: Grid● Métodos: ● String[] getSelectedItem(); ● isChecked:(int lineIndex); ● setChecked(int row, boolean check); ● replace(String[] item, int row); ● setSelectedRow(int line); ● size(); - retorna o número de linhas; ● setColumnEditable(int col, boolean editable); ● setColumnChoices(int col, String[] choices); - Habilita um CheclBox com possíveis valores; ● setCellController(Grid.CellController cc);
  79. 79. Controle básico: Grid● Métodos da classe CellControler: ● Color getBackColor(int row, int col); ● Color getForeColor(int row, int col); ● boolean isEnabled(int row, int col); ● String[] getChoices(int row, int col);● Obs: Usando o CellControler o desenho do Grid ficará mais lento;● Atributos: ● boldCheck (apenas para alta resoluções); ● canClickSelectAll; ● disableSort; ● enabledColumnResize; ● oldCellText;
  80. 80. Controle básico: Grid ● captionsBackColor; ● firstStripeColor; ● secondStripeColor; ● drawStripe; ● String[] captions; ● verticalLineStyle: – Valores possíveis: VERT_LINE, VERTO_DOT(default) , VERT_NONE;● Exemplo:
  81. 81. A classe Window● Já sabemos a utilidade da MainWindow; ● Esta, pode chamar uma janela (Window), que pode chamar outra e assim sucessivamente;● Todas serão modal, porém, apenas a última (topMost) poderá receber eventos e não se pode alternar para a janela anterior sem antes fechar a atual;● Como Window estende Control, então você não pode adicionar a um Container uma janela;● Para exibir uma janela, você pode chamar os métodos: ● popup; ● popupNonBlocking;
  82. 82. A classe Window● Recursos: ● setTitle; ● setBorderStyle, valores válidos: – NO_BORDER; RECT_BORDER; ROUND_BORDER; TAB_BORDER; TAB_ONLY_BORDER;● Janelas podem ser movidas pela tela; ● E se eu não quiser isso? (makeUnmovable);● Os métodos getPreferredWidth (e height) são mecanismos especiais da classe Window; ● Eles retornam o valor mínimo necessário para uma correta exibição da janela;
  83. 83. A classe Window● Métodos: ● onClickOutside(int x, int y); – Temos duas opções de manuplação: ● Retornar true e tratar o erro; ● Retornar false e setar true em beepIfOut; ● onPopup(); ● postPopup(); ● onUnpop(); ● postUnpop();
  84. 84. A Classe Window● Prática: Observe as figuras e tente fazer igual;
  85. 85. Interfaces de Diálogos● São chamadas quando há uma mensagem informativa ou uma requisição específica de entrada;● São sub-classes de Window; ● Não são mostradas automaticamente; ● Seguem as mesmas regras anteriores;● Existem classes prontas para determinadas tarefas, tais como: ● Mensagens, datas, números, ...
  86. 86. Interface de Diálogos: MessageBox● Diálogo simples para mostrar um texto com alguns botões personalizáveis (Yes/ No, Ok/Cancel, Save/Discard/Cancel);● Possui 3 construtores: ● String title, String msg; ● String title, String text, String[] buttonCaptions; ● String title, String text, String[] buttonCaptions, int gap, int insideGap;
  87. 87. Interface de Diálogos: MessageBox● Possui apenas 3 métodos: ● getPressedButtonIndex () – Inicia com ZERO; – Se retornar -1 a janela foi fechada; ● setTextAlignment(int align) – LEFT, CENTER (default), RIGHT; ● setUnpopDelay(int unpopDelay); – Em milisegundos;
  88. 88. Interface de Diálogos: InputBox● Diálogo simples usado para capturar uma entrada (texto) de um usuário; ● É contido, basicamente, pelo um Label e um Edit; ● Se comporta como um Edit; ● É posicionado no centro da tela e o Edit recebe o foco automático;● Possui 2 construtores: ● (String title, String text, String defaultValue); – Cria com 2 botões padrões: Ok e Cancel; ● (String title, String text, String defaultValue, String[] buttonCaptions);
  89. 89. Interface de Diálogos: InputBox● Métodos: ● getPressedButtonIndex(); ● getEdit(); ● getValue(); ● setValue(String txt);
  90. 90. Interface de Diálogos: KeyboardBox● Teclado virtual para dispositivos touchscreen;● Seu construtor não recebe argumento;● Não possui nenhum método;● Ora bolas então como usá-lo? ● Quando ele é exibido, ele pega uma referência à Window topMost, fixa o foco para um Edit e por fim, devolve para o “target”;
  91. 91. Interface de Diálogos: CalculatorBox● Uma caixa prontinha com uma calculadora básica com dois operandos, o resultado e algumas opções de operadores;● Possui apenas o construtor padrão que: ● Limpa os dados da calculadora; ● Pega o valor do controle que iniciou (edit) a chamada e adiciona ao operador 1;● Pode ser usado o método popup();
  92. 92. Interface de Diálogos: CalendarBox● Mostra um pequeno calendário;● É mostrado com o dia atual por default;● Quando o dia é selecionado o controle é fechado;● Possui apenas o construtor padrão, mas existem os seguintes métodos: ● getSelectedDate(); ● setSelectedDate(Date d);● Pode ser usado o método popup();
  93. 93. Imagens● Constituem imagens retangulares;● O TC suporta imagens de 24bpp; ● Apenas o formato PNG e JPEG; ● Porém, podemos usar o GIF e BMP que a TCMV converte automaticamente;● Imagens NÃO podem ser adicionadas diretamente em um Container, pois NÃO são controles; ● Então como exibir? ● Existem duas formas: – ImageControl; – Button;
  94. 94. Imagens● Construtores: ● Image(int width, int height); ● Image(byte[] fullDescription); ● Image(String path); ● Image(Stream s);● Métodos: ● Image.isSupported(String filename); ● getHeight() e getWidth(); ● getGraphics(); ● changeColors(int from, int to);● Exemplo:
  95. 95. Assim...● Estamos praticamente aptos a criar nossa primeira aplicação de verdade;● Eis algumas opções: ● Mini-agenda (pessoal); ● Gerenciamento de plantil de rosas (agrícola); ● Gerenciamento de vendas (comercial); ● Controle de custos para viagens (pessoal e comercial); ● Comanda eletrônica p/ restaurantes(comercial); ● Controle de irrigação de lotes(agrícola); ● Carrinho eletrônico p/ supermercados (empresarial);● Que tal?
  96. 96. Classes utilitárias● Podemos encontrar nestes pacotes (util e sys) os seguintes recursos: ● Manipulação de Datas e Horas; ● Geração de números aleatórios; ● Estrutura de dados; ● Loggin; ● Conversões;
  97. 97. O pacote util: manipulação de data● Manipula o calendário Gregoriano com o intervalo de 1/1/1000 até 31/12/2999.● Constantes: ● Date.JANUARY ... Date.DECEMBER; ● Date.SUNDAY ... Date.SATURDAY;● Possui 6 construtores: ● Date(); ● Date(int sentDay, int sentMonth, int sentYear); ● Date(String strDate);
  98. 98. O pacote util: manipulação de data● Métodos: ● advance(int numberDays); – Caso o parâmetro seja negativo ele faz o retrocesso; ● advanceMonth(); ● advanceWeek(); ● setToday();● Comparação entre objetos Date: ● isAfter(Date sentDate); ● isBefore(Date sentDate); ● equals(Object sentDate);● E muito mais ...
  99. 99. O pacote util: a classe Vector● Implementa um array dinâmico de objetos;● Não se pode acessar os elementos diretamente, usa-se os métodos encapsulados; ● Por questões de performance, o TC implementa os atributos como public; ● Todavia, JAMAIS manipule inserção, remoção e redimensionamento do array (garantia de integridade); ● Porém, pode se usar getter e setter;
  100. 100. O pacote util: a classe Vector● Construtores: ● Vector() : tamanho default de 8; ● Vector(int size) : size >= 0; ● Vector(Object[] startingWith);● Métodos ● De adição: – addElement(Object obj); – insertElementAt(Object obj, int index); ● De Remoção: – removeElement(Object obj); – removeElementAt(int index); – removeAllElements();
  101. 101. O pacote util: a classe Vector ● De Indexação: – indexOf(Object obj, int startIndex); – indexOf(Object obj); – Retornam -1 se o objeto não for encontrado;● Outros métodos: ● isEmpty(); ● size(); ● setSize(int newSize); ● qsort(); ● toObjectArray();● Um Vector pode ser usado como um Pilha: ● push(Object obj); ● pop(); ● peek(); - retorna o objeto sem removê-lo;
  102. 102. O pacote util: a classe IntVector● Idem ao anterior, com a diferença que agora teremos um vetor de números inteiros;● Construtores: ● IntVector(); ● IntVector(int size); ● IntVector(int[] items);● Os métodos são exatamente os mesmos, apenas alterando o parâmetro que agora sempre será int; ● O métodos toObjectArray agora é toIntArray();
  103. 103. O pacote util: a classe Hashtable● Implementa uma tabela hash com chaves e valores;● Possui 2 construtores: ● Hashtable(int initialCapacity); ● Hashtable(String res); – Constrói uma tabela hash com os elementos da String;● Métodos de inserção: ● put(Object key, Object value); ● put(int hash, Object value);● Para saber se um chave já existe, use: exists(Object key);
  104. 104. O pacote util: a classe Hashtable● Métodos para retirar um elemento: ● get(Object key); ● get(int hash);● Métodos para retornar todos os valores: ● Vector getKeys(); ● Vector getValues(); ● Vector getKeyValuePairs(String separator); – Retorna o conjunto: key + separador + valores;● Mais métodos: ● size(): retorna o número de chaves; ● remove(Object key); ● clear(): limpa todas as entradas da tabela;
  105. 105. O pacote util: a classe IntHashtable● Idem ao anterior, com a diferença que agora teremos uma tabela hash de números inteiros;● Os métodos são exatamente os mesmos, apenas alterando o parâmetro que agora sempre será int;
  106. 106. O pacote util: a classe Random● É uma operação linear para gerar números aleatórios no intervalo de [0,231];● O intervalo não é grande, porém sua utilização é rápida e usa pouca memória;● Construtores: ● Random(); ● Random(int seed); – Seed possui valor absoluto;
  107. 107. O pacote util: a classe Random● A classe possui apenas 4 métodos: ● nextInt(int n); ● nextDouble(); ● between(int s, int e); ● between(char s, char e);
  108. 108. O pacotetotalcross.sys
  109. 109. O pacote sys: a classe Time● Especifica uma data e hora;● O ano possui 4 dígitos e a hora usa notação de 24 horas com a notação padrão internacional; ● Também pode ser referido ao tempo militar e astronômico;● Por questões de performance, seus atributos são públicos;
  110. 110. O pacote sys: a classe Time● Campos e faixas: ● Ano: 4 dígitos; ● Mês: de 1 a 12; ● Dia: de 1 a último dia do mês especificado; ● Hora: de 0 a 23; ● Minutos: de 0 a 59; ● Segundos: de 0 a 59; ● Milisegundos: de 0 a 999;
  111. 111. O pacote sys: a classe Time● Construtores: ● Time(); - data e hora atual; ● Time(int year, int month, int day, int hour, int minute, int second, int millis); ● Time(long t); – Formato: YYYYMMDDHHMMSS ● Time(String iso8601); – Formato: YYYYMMDDTHH:MM:SS;
  112. 112. O pacote sys: a classe Time● Métodos: ● De comparação: equals(Object o); ● getTimeLong(); ● toIso8601(); ● toString();
  113. 113. O pacote sys: a classe Convert● Contém métodos para conversão de objetos e tipos básicos;● É uma classe Final e seus métodos e atributos são estáticos;● Conversões entre Strings e Tipos Básicos: ● toDouble(String s); ● toInt(String s); ● toLong(String s); ● toLong(String s, int radix); ● toString(boolean b); ● toString(char c); ● toString(double d);
  114. 114. O pacote sys: a classe Convert ● toString(double val, int decimalCount); ● toString(int i); ● toString(long l); ● toString(long i, int radix); ● toString(String doubleValue, int n); ● unsigned2hex(int b, int places);● Caracteres, Strings e StringBuffers; ● appendPath(String path1, String path2); ● insertAt(StringBuffer sb, int pos, char c); ● numberOf(String s, char c); ● replace(String source, String from, String to); ● toLowerCase(char c); ● toUpperCase(char c);
  115. 115. O pacote sys: a classe Convert● Arrays: ● cloneStringArray(String[] strs); ● toStringArray(Object[] objs); ● detectSortType(Object item); – Constantes provenientes da ordenação de Arrays usando o Quick Sort: ● SORT_AUTODETECT; ● SORT_OBJECT; ● SORT_STRING; ● SORT_INT; ● SORT_DOUBLE; ● SORT_DATE; ● SORT_COMPARABLE; ● SORT_STRING_NOCASE;
  116. 116. O pacote sys: a classe Convert ● Ordenação: – qsort(Object[] items, int first, int last); – qsort(Object[] items, int first, int last, int sortType); – qsort(Object[] items, int first, int last, int sortType, boolean ascending);● Outras conversões: ● chars2int(String fourChars); ● int2chars(int i);
  117. 117. Parte III:O SGDB LiteBaseNoções Básicas e Visão Geral
  118. 118. O Litebase● É um “SGDB” para TotalCross;● Usa a linguagem SQL para manipulação e criação de dados (DDL e DML);● Está contido no pacote: litebase.*;● É suportado em TODAS as plataformas do TC;● Suporte a múltiplas linguagens: ● LitebaseConnection.setLanguage (LitebaseConnection.LANGUAGE_PT);● Não esqueça de adicionado à sua biblioteca personalizada no Eclipse!
  119. 119. Limitações e uso● O nome da tabela é limitado em 23 caracteres;● Pode-se criar acima 99 índices;● Índices usados durante uma avaliação da cláusula where: ● and; or; like ‘a%’; ● Não suportados: – like %a (ends with); like %a% (index of); – ( ), and; not.
  120. 120. Limitações e uso● Funções de agregação: ● max, min, avg, sum, count e order by;● O Join é suportado; ● Exceto: Inner, Left e Right;● Valores nulos e default são suportados;● BLOBs são suportados;● Varchar também;● Tente não usar o * nos selects;
  121. 121. Limitações e uso● É possível armazenar usando o memory card;● É possível usar multi-threads para várias conexões com o banco; ● No entanto, isso NÃO é recomendado;● Existem várias palavras reservadas e funções! ● Consulte o manual e “Mãos a Obra”;
  122. 122. Tipos de dados● Short: Java short [-32768 +32767];● INT: Java int [-2.147.483.648 +2.147.483.647]● LONG: Java long [-9.223.372.036.854.775.808 … ]● FLOAT: Java float;● DOUBLE: Java double;● CHAR: Java char;● CHAR NOCASE;● VARCHAR;● DATE;● DATETIME;● BLOB;
  123. 123. Entendendo seu funcionamento... ● 1º. Criar o driver de conexão:LitebaseConnection driver = LitebaseConnection.getInstance("Test"); ● 2º. Criar uma tabela com seus índices:try{ driver.execute("CREATE TABLE TBTeste (id int, valorD double, valorI int, name varchar)"); driver.execute("CREATE INDEX idx_name ON TBTeste(id)");} catch (AlreadyCreatedException e){ }
  124. 124. Entendendo seu funcionamento...● 3º. Inserir valores:driver.executeUpdate("INSERT INTO TBTeste VALUES (1, 30.0, 31)");driver.executeUpdate("INSERT INTO TBTeste VALUES (2, 99.8, 22)");● 4º. Recuperando valores:...ResultSet rs = driver.executeQuery("SELECT id, valorD, name FROM TBTeste WHERE valorI >= 20");if (rs.next()){ String name = rs.getString("name"); double salary = rs.getDouble(2); ...} // ifrs.close();
  125. 125. Um pequeno exemplo...
  126. 126. Concluindo ... Muito Obrigado eagora é com vocês!!!!!!!

×