JavaFX ScriptIntrodução
Fábio Nogueira de LucenaInstituto de Informática (UFG)Graduação em Engenharia de Softwarehttp://engenhariadesoftware.inf.br
JavaFX é umafamília de produtos
“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”
javafx.com
Fonte de informações
java.sun.com/javafx
Fonte de informações
Componentes
• API
• JavaFX Script (linguagem de programação)
• JavaFX SDK
Onde obtê-los: javafx.com
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
Importante
• Tudo o que existe em Java pode ser reutilizado em JavaFX
•Você poderá reutilizar suas classes Java!
Sentenças em JavaFX:Antes de um Exemplo
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
Object literal
• Em JavaRectangle r = new Rectangle();r.width = 10;r.height = 5;
• Em JavaFXRectangle { width : 10 height: 5}
Packages e imports
• Packagepackage br.ufg.inf.projetoX;
• Importimport javafx.stage.Stage;import javafx.scene.*;
Primeiro exemplopackage 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" } }}
Como obtê-lo?
• Repositório dos exemploshttp://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
Como compilar e executar?
• Vá para o diretório criadocd jfx1
• Compilaçãojavafxc -d ~/tmp src/jfx1/Main.fx
• Execuçãojavafx -cp ~/tmp jfx1.Main
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 resultado da compilação anteriorjavafx -cp ~/tmp jfx1.Main
• O resultado...
Primeiro a linguagem, depois os recursos da API
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;
Tipos (implícitos)// var boolean : Boolean = true;// é o mesmo que...var boolean = true;
// var int : Integer = 4;// é o mesmo que ... var int = 4;
Todos os tipos
BooleanIntegerNumberStringDurationCharacterByteShortLongFloatDouble
Number é sinônimo de FloatFloat é equivalente a Number
Float é sinônimo de Number
Number é equivalente a Float
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?
Constantes
// Variávelvar logica : Boolean = false;
// CONSTANTEdef pi = 3.1415926536;println(“Valor: {pi}”);
var (variável)def (constante)
Área de um círculo
// Arquivo: x.fx// Área pi * raio * raiodef pi = 3.1415926536;def raio = 2; // Dois metrosprintln(“Área: {pi*raio*raio}m2”);
var (variável)def (constante)
Este código é compilável e executável!$ javafxc x.fx$ javafx x
Volume de um cilindro
// Área pi * raio * raiodef pi = 3.1415926536;def raio = 2; // Dois metrosvar area = pi * raio * raio;var altura = 1; // 1 metrovar volume = area * altura * 1000;println(“Volume: {volume} litros”);
var (
variá
vel)
def (
cons
tant
e)
Este código é compilável e executável!$ javafxc x.fx$ javafx x
String (“ ou ‘)
def name : String = “Nome”;var nAme = ‘Nome’;var iguais = ‘{name == nAme}’;// Imprime // Iguais?: trueprint(“Iguais?: {iguais}”);
“stri
ng” o
u ‘st
ring
’
Este código é compilável e executável!$ javafxc x.fx$ javafx x
String (múltiplas linhas)
var name = “Pedro ” ‘Álvares’ “ Cabral”;
// Imprime// Pedro Álvares Cabralprint(name);
Este código é compilável e executável!$ javafxc x.fx$ javafx x
“stri
ng” o
u ‘st
ring
’
“string” ou ‘string’
Duration
var horas = 0h;var minutos = 1m;var segundos = 1s;var milissegundos = 1ms;var parcial = horas + milissegundos;print(parcial + minutos + segundos);
Detalhes em javafx.lang.Duration
Este código é compilável e executável!
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
Sequências
var lista = [-1, 0, 1];def ordenada = [ false, true, true ];var mesmoTipo = [ ‘A’, “ Janela” ];
println(lista);println(ordenada);println(mesmoTipo);
Nenhuma surpresa:
Sequence é uma lista ordenadade elementos de um mesmo tipo
Sequências
var ints : Integer[] = [1, 2,3];def bs : Boolean[]=[false];def vazia=[];println(ints);println(bs);println(vazia);
Nada espetacular...
Sequence é uma lista ordenadade elementos de um mesmo tipo
Sequências
// Vírgula como separadorvar strs = [ “ok”, ‘correto’ ];println(strs);
Aplicação de 3 linhas:
Sequence é uma lista ordenadade elementos de um mesmo tipo
Nem sempre...
sequências são explicitamente criadas por meio de seus elementos separados por vírgulas, nestes casos, ...
Faixas (sequências numéricas)
var ints = [1..5]; // step é 1println(ints);var ns = [ 1.0..1.3 step 0.1];println(ns);
Arquivo n.fx é compiladon (do nome do arquivo) é executada
Step padrão é 1 ou 1.0 dependendo do tipo do elemento
Faixas (sequências numéricas)
println([1..<5]); // 1 a 4println([4..1 step -1]); // 4 a 1println([10..1]); // [ ]println(sizeof [1..67]); // 67
Step padrão é 1 ou 1.0 dependendo do tipo do elemento
Sequências não podem conter sequências
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);
Uma sequência contém apenas objetos Uma sequência não é um objeto!
Elementos são concatenados:
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:
Sequências não podem conter sequências
Uma sequência contém apenas objetos Uma sequência não é um objeto!
Convertendo para String
var bytes : Byte[] = [2..1 step -1];println(bytes);println(“{bytes}”);println(“{[5..0 step -1]}”);
Saídas produzidas
Sequence é uma lista ordenadade elementos de um mesmo tipo
O que você já sabe?Sequence é uma lista ordenadade elementos de um mesmo tipo
javafxc compila arquivo .fxjavafx executa
println(new java.util.Date());
A linha abaixo é compilável e executável!
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
Tamanho (sizeof)
var ints = [ 2..10000 ];println(sizeof ints); // 9999
sizeof também pode ser empregadopara tipos primitivos (retorna 1)
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); // 1println(sizeof ref); // 0
Acesso a elemento
var ints = [ 2..10000 ];ints[3] = 2;
println(ints[-14]); // Imprime 0println([1, 3][1]); // Imprime 3println(ints[4]); // Imprime 6
// Imprime trueprintln(ints[2*10000] == ints[-1]);
nome de sequence ou expressão que resulta emsequence seguido de [indice]
[indice]
Acesso a segmento
print([1..5][0..]); // todosprint([1..5][0..<1]); // [ 1 ]print([1..5][0..0]); // [ 1 ]print([1..5][2..<]); // [ 3, 4 ]print([1..5][3..4]); // [ 4, 5 ]
nome de sequence ou expressão que resulta emsequence seguido de:
[índice]
Segmento por predicado
var ns = [1..5];print(ns[x | x < 6]); // todosprint(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
Elementos não necessariamente consecutivossão selecionados, basta satisfazer condição
[valores da sequência]
Invertendo ordem
var ns = [1..5];var sn = [5..1 step -1];print(reverse ns); // [ 5, 4, ...print(reverse ns == sn); // true
Não modifica a sequência original, produzoutra que contém os mesmos elementos,
mas na ordem inversa
reverse nsUma outra sequência é criada
Inserindo elemento
Modifica a sequência original
insert intoinsert beforeinsert after
insert into
var ns = [1..3];insert 10 into ns;print(ns); // [ 1, 2, 3, 10 ]
Modifica a sequência originalInsere um valor no final de uma sequência
insert x into sequencia;Valor x é inserido no final de sequencia
insert before
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 ]
Modifica a sequência originalInsere valor em sequência antes do índice fornecido
insert x before sequencia [indice];Valor x é inserido em sequencia antes de indice
insert after
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 ]
Modifica a sequência originalInsere valor em sequência
após o índice fornecido
insert x after sequencia [indice];Valor x é inserido em sequencia após indice
Inserir sequência em sequência
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];
Modifica a sequência originalinsert into, insert before e insert after
Removendo elementos
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);
Modifica a sequência originaldelete valor from sequência
delete sequência [índice]
delete x from sequenciadelete sequencia [índice]
Sequence comprehension
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 ]
Criando sequências com uso do for
Última sentença do for(define o valor)
var ints = for (x in [1..2]) { println(x); x*x;};println(ints);
Criando sequências com uso do for
Resultado:
Funções úteis
binarySearchindexByIdentityindexOfisEqualByContentIdentitymaxminnextIndexByIdentitynextIndexfreverseshufflesort
javafx.util.Sequences
Ordenando
import javafx.util.Sequences;
var strs = [ “teste”, “cadeira”, “casa” ];var ord = Sequences.sort(strs);println(ord);
var ints = [10..1 step -1];def intsOrdered = Sequences.sort(ints);println(intsOrdered);
javafx.util.Sequences.sort(seq)
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
[ “cadeira”, “casa”, “teste” ]
Expressões
println([1..10]);
{ println([1..10]);}
Trecho de código em JavaFX Scriptque o compilador é capaz de compreender
Expressões equivalentes do tipo void
Expressões
10;
{ 10;}
Trecho de código em JavaFX Scriptque o compilador é capaz de compreender
Expressões equivalentes do tipo Integer
Atribuições
var x = 10;var y = { 10;}var z = { def a = 5; def b = 2; a * b;}
Trecho de código em JavaFX Scriptque o compilador é capaz de compreender
Atribuições envolvendo expressões equivalentes do tipo Integer
Atribuições
var x = 10;
var y = { println(x); x + 10; // ; é opcional aqui}println(y);
Trecho de código em JavaFX Scriptque o compilador é capaz de compreender
Atribuições envolvendo expressões do tipo Integer
While
var x = 1;while (x < 10) { print(“ {x}”); x++;}
Executar bloco de códigoenquanto condição for verdadeira
Resultado:1 2 3 4 5 6 7 8 9
For
var y = for (x in [1..10]) { print(“ {x}”); “a{x*x}”}println(“ “);println(y);
Executar bloco de códigoenquanto condição for verdadeira
Resultado:1 2 3 4 5 6 7 8 9 10
[ a1, a4, a9, a16, a25, a36, a49, a64, a91, a100 ]
if
var x = 1;println(“{if (x>0) then x+3 else x-10}”);
Executar bloco de códigoconforme avaliação de condição
Resultado:4
if
var x = 1;var y = if (x < 0) then “a” else “b”;println(“Resultado: {y}”);
Executar bloco de códigodependendo de avaliação de condição
O que é produzido?Resultado: b
O que ainda falta?
• object literal
• binding
• gráficos
• API Não perca...
Top Related