Mais conteúdo relacionado

Mais de Fábio Nogueira de Lucena(20)

Último(20)

Javafx Introdução

  1. JavaFX Script Introdução Fábio Nogueira de Lucena Instituto de Informática (UFG) Graduação em Engenharia de Software http://engenhariadesoftware.inf.br
  2. JavaFX é uma família de produtos
  3. “Habilidade para criar conteúdo interativo, aplicações e serviços a serem executados do computador de mesa aos dispositivos da sala de estar” “Experiências de internet ricas para todas as telas da sua vida”
  4. Fonte de informações javafx.com
  5. Fonte de informações java.sun.com/javafx
  6. Componentes • API • JavaFX Script (linguagem de programação) • JavaFX SDK Onde obtê-los: javafx.com
  7. Alguns links • http://javafx.com • http://java.sun.com/javafx • http://www.javapassion.com/javafx/ • Esta e outras apresentações (slides): http://www.slideshare.net/kyrios
  8. Importante • Tudo o que existe em Java pode ser reutilizado em JavaFX • Você poderá reutilizar suas classes Java!
  9. Sentenças em JavaFX: Antes de um Exemplo
  10. Comentários • Comentário (múltiplas linhas) /* Comentário que se estende por mais de uma linha. */ • Comentário (uma única linha) // Até o final da linha
  11. Object literal • Em Java Rectangle r = new Rectangle(); r.width = 10; r.height = 5; • Em JavaFX Rectangle { width : 10 height: 5 }
  12. Packages e imports • Package package br.ufg.inf.projetoX; • Import import javafx.stage.Stage; import javafx.scene.*;
  13. Primeiro exemplo package jfx1; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.*; /* Main.fx */ Stage { title: "Título da Aplicação (janela)" width: 250 height: 80 scene: Scene { content: Text { font : Font { size : 16 } x: 10, y: 30 content: "Meu primeiro teste" } } }
  14. Como obtê-lo? • Repositório dos exemplos http://exemplos.googlecode.com/svn/trunk/javafx • Comando para obter localmente? (cria diretório jfx1 a partir do repositório) svn export <url-acima>/jfx1 jfx1
  15. Como compilar e executar? • Vá jfx1 o diretório criado cd para • Compilação javafxc -d ~/tmp src/jfx1/Main.fx • Execução-cp javafx ~/tmp jfx1.Main
  16. Se o resultado for... • Especifique o encoding pertinente ao arquivo fonte (no momento da compilação) javafxc -d ~/tmp -encoding ISO-8859-1 src/jfx1/Main.fx • Ao executar o~/tmp jfx1.Main javafx -cp resultado da compilação anterior • O resultado...
  17. Primeiro a linguagem, depois os recursos da API
  18. Variáveis e tipos (explícitos) var boolean: Boolean = true; var byte: Byte = 2; var short: Short = 3; var int:Integer = 4; var long: Long = 5; var float: Float = 1.2; var double: Double = 2.0;
  19. Tipos (implícitos) // var boolean : Boolean = true; // é o mesmo que... var boolean = true; // var int : Integer = 4; // é o mesmo que ... var int = 4;
  20. Todos os tipos Boolean Integer Number String Duration Number é sinônimo de Float Character Byte Float é equivalente a Number Short Long Float é sinônimo de Number Float Double Number é equivalente a Float
  21. Exemplo Boolean // Pacote: javafx.lang // Classe FX (vários métodos static) var logica : Boolean = false; FX.println(“Valor: {not logica}”); // OU println(“Valor: {not logica}”); Notou que não houve concatenação explícita?
  22. Constantes var (variável) def (constante) // Variável var logica : Boolean = false; // CONSTANTE def pi = 3.1415926536; println(“Valor: {pi}”);
  23. Área de um círculo var (variável) def (constante) // Arquivo: x.fx // Área pi * raio * raio def pi = 3.1415926536; def raio = 2; // Dois metros println(“Área: {pi*raio*raio}m2”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  24. Volume de um cilindro // Área pi * raio * raio def pi = 3.1415926536; def raio = 2; // Dois metros var area = pi * raio * raio; var altura = 1; // 1 metro var volume = area * altura * 1000; def (constante) var (variável) println(“Volume: {volume} litros”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  25. String (“ ou ‘) def name : String = “Nome”; “string” ou ‘s tring’ var nAme = ‘Nome’; var iguais = ‘{name == nAme}’; // Imprime // Iguais?: true print(“Iguais?: {iguais}”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  26. String (múltiplas linhas) “s t var name = “Pedro ” r i ng ‘Álvares’ ”o u ‘s “string” ou ‘s tring’ “ Cabral”; tri ng ’ // Imprime // Pedro Álvares Cabral print(name); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  27. Duration Detalhes em javafx.lang.Duration var horas = 0h; var minutos = 1m; var segundos = 1s; var milissegundos = 1ms; var parcial = horas + milissegundos; print(parcial + minutos + segundos); Este código é compilável e executável!
  28. Sequência é uma coleção de objetos ordenados • É declarada com colchetes ([ e ]) • Uma sequência é linear, não existem sequências multidimensionais • Sequências são iguais se possuírem o mesmo tamanho e os mesmos valores nas mesmas ordens • Notação: tipo seguido de [] (por exemplo, Integer[]) • sizeof recupera o tamanho da sequência
  29. Sequências Sequence é uma lista ordenada de elementos de um mesmo tipo var lista = [-1, 0, 1]; def ordenada = [ false, true, true ]; var mesmoTipo = [ ‘A’, “ Janela” ]; println(lista); println(ordenada); println(mesmoTipo); Nenhuma surpresa:
  30. Sequências Sequence é uma lista ordenada de elementos de um mesmo tipo var ints : Integer[] = [1, 2,3]; def bs : Boolean[]=[false]; def vazia=[]; println(ints);println(bs);println(vazia); Nada espetacular...
  31. Sequências Sequence é uma lista ordenada de elementos de um mesmo tipo // Vírgula como separador var strs = [ “ok”, ‘correto’ ]; println(strs); Aplicação de 3 linhas:
  32. Nem sempre... sequências são explicitamente criadas por meio de seus elementos separados por vírgulas, nestes casos, ...
  33. Faixas (sequências numéricas) Step padrão é 1 ou 1.0 dependendo do tipo do elemento var ints = [1..5]; // step é 1 println(ints); var ns = [ 1.0..1.3 step 0.1]; println(ns); Arquivo n.fx é compilado n (do nome do arquivo) é executada
  34. Faixas (sequências numéricas) Step padrão é 1 ou 1.0 dependendo do tipo do elemento println([1..<5]); // 1 a 4 println([4..1 step -1]); // 4 a 1 println([10..1]); // [ ] println(sizeof [1..67]); // 67
  35. Sequências não podem conter sequências Uma sequência contém apenas objetos Uma sequência não é um objeto! var inicio = 1; var fim = 9; var p = 2; var impares = [inicio..fim step p]; var pares = [(inicio+1)..(fim+1) step p]; var todos = [ impares, pares ]; println(todos); Elementos são concatenados:
  36. Sequências não podem conter sequências Uma sequência contém apenas objetos Uma sequência não é um objeto! import javafx.util.Sequences; var impares = [1..9 step 2]; var pares = [2..10 step 2]; println(Sequences.sort([impares,pares])); Elementos são concatenados e ordenados:
  37. Convertendo para String Sequence é uma lista ordenada de elementos de um mesmo tipo var bytes : Byte[] = [2..1 step -1]; println(bytes); println(“{bytes}”); println(“{[5..0 step -1]}”); Saídas produzidas
  38. O que você já sabe? Sequence é uma lista ordenada de elementos de um mesmo tipo javafxc compila arquivo .fx javafx executa A linha abaixo é compilável e executável! println(new java.util.Date());
  39. Leia mentalmente... • Obter o tamanho de uma sequence • Recuperar um único elemento • Recuperar uma faixa de elementos consecutivos • Recuperar subconjunto de elementos não consecutivos que satisfazem critérios de busca • Inverter a ordem • Inserir/remover um elemento
  40. Tamanho (sizeof) sizeof também pode ser empregado para tipos primitivos (retorna 1) var ints = [ 2..10000 ]; println(sizeof ints); // 9999 sizeof usado também com referência (retorna 1 se não for null ou 0 para null) var integer : Integer; var ref : javafx.scene.shape.Rectangle; println(sizeof integer); // 1 println(sizeof ref); // 0
  41. Acesso a elemento nome de sequence ou expressão que resulta em sequence seguido de [indice] var ints = [ 2..10000 ]; ints[3] = 2; println(ints[-14]); // Imprime 0 println([1, 3][1]); // Imprime 3 println(ints[4]); // Imprime 6 // Imprime true println(ints[2*10000] == ints[-1]); [indice]
  42. Acesso a segmento nome de sequence ou expressão que resulta em sequence seguido de: print([1..5][0..]); // todos print([1..5][0..<1]); // [ 1 ] print([1..5][0..0]); // [ 1 ] print([1..5][2..<]); // [ 3, 4 ] print([1..5][3..4]); // [ 4, 5 ] [índice]
  43. Segmento por predicado Elementos não necessariamente consecutivos são selecionados, basta satisfazer condição var ns = [1..5]; print(ns[x | x < 6]); // todos print(ns[y | y == 4]); // [ 4 ] print(ns[z | z*z == 4]); // [ 2 ] print(ns[varX | true]); // todos // Imprime [ 1, 3, 5 ] (índices pares) print(ns[k | indexof k mod 2 == 0]); print(ns[par | par mod 2 == 0]); // Pares [valores da sequência]
  44. Invertendo ordem Não modifica a sequência original, produz outra que contém os mesmos elementos, mas na ordem inversa var ns = [1..5]; var sn = [5..1 step -1]; print(reverse ns); // [ 5, 4, ... print(reverse ns == sn); // true reverse ns Uma outra sequência é criada
  45. Inserindo elemento Modifica a sequência original insert into insert before insert after
  46. insert into Modifica a sequência original Insere um valor no final de uma sequência var ns = [1..3]; insert 10 into ns; print(ns); // [ 1, 2, 3, 10 ] insert x into sequencia; Valor x é inserido no final de sequencia
  47. insert before Modifica a sequência original Insere valor em sequência antes do índice fornecido var ns = [1..3]; // [ 1, 2, 3 ] insert -1 before ns [2]; print(ns); // [ 1, 2, -1, 3 ] insert -1 before ns[0]; print(ns); // [ -1, 1, 2, -1, 3 ] insert x before sequencia [indice]; Valor x é inserido em sequencia antes de indice
  48. insert after Modifica a sequência original Insere valor em sequência após o índice fornecido var ns = [1..3]; insert -1 after ns [2]; print(ns); // [ 1, 2, 3, -1 ] insert -1 after ns[-1]; print(ns); // [ -1, 1, 2, 3, -1 ] insert x after sequencia [indice]; Valor x é inserido em sequencia após indice
  49. Inserir sequência em sequência Modifica a sequência original insert into, insert before e insert after var pares1 = [1..5][x | x mod 2 == 0]; var pares2 = pares1; var pares3 = pares1; var impares = [1..3][x | x mod 2 != 0]; // [ 2, 4, 1, 3 ] insert impares into pares1; // [ 1, 3, 2, 4 ] insert impares before pares2 [0]; // [ 2, 1, 3, 4 ] insert impares after pares3 [0];
  50. Removendo elementos Modifica a sequência original delete valor from sequência delete sequência [índice] var ints = [1..10]; delete 1 from ints; // [ 2,3,4,5,6,7,8,9,10 ] delete 3 from ints; // [ 2,4,5,6,7,8,9,10 ] delete ints [2]; // [ 2,4,6,7,8,9,10 ] delete ints [3]; // [ 2,4,6,8,9,10 ] delete ints [4..4]; // [ 2,4,6,8,10 ] delete ints [5]; // [ 2,4,6,8,10 ] println(ints); delete x from sequencia delete sequencia [índice]
  51. Sequence comprehension Criando sequências com uso do for var ints = for (x in [1..2]) x*x; println(ints); // [ 1, 4 ] var ns = for (x in [1..2] where x > 1) x; println(ns); // [ 2 ] def AA = [ 1, 2 ]; def BB = [ 3, 4 ]; var matriz = for (a in AA, b in BB) a*10 + b; println(matriz); // [ 13, 14, 23, 24 ]
  52. Última sentença do for (define o valor) Criando sequências com uso do for var ints = for (x in [1..2]) { println(x); x*x; }; println(ints); Resultado:
  53. Funções úteis javafx.util.Sequences binarySearch indexByIdentity indexOf isEqualByContentIdentity max min nextIndexByIdentity nextIndexf reverse shuffle sort
  54. Ordenando javafx.util.Sequences.sort(seq) import javafx.util.Sequences; var strs = [ “teste”, “cadeira”, “casa” ]; var ord = Sequences.sort(strs); println(ord); [ “cadeira”, “casa”, “teste” ] var ints = [10..1 step -1]; def intsOrdered = Sequences.sort(ints); println(intsOrdered); [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
  55. Expressões Trecho de código em JavaFX Script que o compilador é capaz de compreender println([1..10]); { println([1..10]); } Expressões equivalentes do tipo void
  56. Expressões Trecho de código em JavaFX Script que o compilador é capaz de compreender 10; { 10; } Expressões equivalentes do tipo Integer
  57. Atribuições Trecho de código em JavaFX Script que o compilador é capaz de compreender var x = 10; var y = { 10; } var z = { def a = 5; def b = 2; a * b; } Atribuições envolvendo expressões equivalentes do tipo Integer
  58. Atribuições Trecho de código em JavaFX Script que o compilador é capaz de compreender var x = 10; var y = { println(x); x + 10; // ; é opcional aqui } println(y); Atribuições envolvendo expressões do tipo Integer
  59. While Executar bloco de código enquanto condição for verdadeira var x = 1; while (x < 10) { print(“ {x}”); x++; } Resultado: 123456789
  60. For Executar bloco de código enquanto condição for verdadeira var y = for (x in [1..10]) { print(“ {x}”); “a{x*x}” } println(“ “); println(y); Resultado: 1 2 3 4 5 6 7 8 9 10 [ a1, a4, a9, a16, a25, a36, a49, a64, a91, a100 ]
  61. if Executar bloco de código conforme avaliação de condição var x = 1; println(“{if (x>0) then x+3 else x-10}”); Resultado: 4
  62. if Executar bloco de código dependendo de avaliação de condição var x = 1; var y = if (x < 0) then “a” else “b”; println(“Resultado: {y}”); O que é produzido? Resultado: b
  63. O que ainda falta? • object literal • binding • gráficos • API Não perca...

Notas do Editor