Download pdf - Javafx Introdução

Transcript
Page 1: Javafx Introdução

JavaFX ScriptIntrodução

Fábio Nogueira de LucenaInstituto de Informática (UFG)Graduação em Engenharia de Softwarehttp://engenhariadesoftware.inf.br

Page 2: Javafx Introdução

JavaFX é umafamília de produtos

Page 3: Javafx Introdução

“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”

Page 4: Javafx Introdução

javafx.com

Fonte de informações

Page 5: Javafx Introdução

java.sun.com/javafx

Fonte de informações

Page 6: Javafx Introdução

Componentes

• API

• JavaFX Script (linguagem de programação)

• JavaFX SDK

Onde obtê-los: javafx.com

Page 7: Javafx Introdução

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

Page 8: Javafx Introdução

Importante

• Tudo o que existe em Java pode ser reutilizado em JavaFX

•Você poderá reutilizar suas classes Java!

Page 9: Javafx Introdução

Sentenças em JavaFX:Antes de um Exemplo

Page 10: Javafx Introdução

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

Page 11: Javafx Introdução

Object literal

• Em JavaRectangle r = new Rectangle();r.width = 10;r.height = 5;

• Em JavaFXRectangle { width : 10 height: 5}

Page 12: Javafx Introdução

Packages e imports

• Packagepackage br.ufg.inf.projetoX;

• Importimport javafx.stage.Stage;import javafx.scene.*;

Page 13: Javafx Introdução

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" } }}

Page 14: Javafx Introdução

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

Page 15: Javafx Introdução

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

Page 16: Javafx Introdução

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

Page 17: Javafx Introdução

Primeiro a linguagem, depois os recursos da API

Page 18: Javafx Introdução

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;

Page 19: Javafx Introdução

Tipos (implícitos)// var boolean : Boolean = true;// é o mesmo que...var boolean = true;

// var int : Integer = 4;// é o mesmo que ... var int = 4;

Page 20: Javafx Introdução

Todos os tipos

BooleanIntegerNumberStringDurationCharacterByteShortLongFloatDouble

Number é sinônimo de FloatFloat é equivalente a Number

Float é sinônimo de Number

Number é equivalente a Float

Page 21: Javafx Introdução

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?

Page 22: Javafx Introdução

Constantes

// Variávelvar logica : Boolean = false;

// CONSTANTEdef pi = 3.1415926536;println(“Valor: {pi}”);

var (variável)def (constante)

Page 23: Javafx Introdução

Á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

Page 24: Javafx Introdução

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

Page 25: Javafx Introdução

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

Page 26: Javafx Introdução

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’

Page 27: Javafx Introdução

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!

Page 28: Javafx Introdução

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

Page 29: Javafx Introdução

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

Page 30: Javafx Introdução

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

Page 31: Javafx Introdução

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

Page 32: Javafx Introdução

Nem sempre...

sequências são explicitamente criadas por meio de seus elementos separados por vírgulas, nestes casos, ...

Page 33: Javafx Introdução

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

Page 34: Javafx Introdução

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

Page 35: Javafx Introdução

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:

Page 36: Javafx Introdução

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!

Page 37: Javafx Introdução

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

Page 38: Javafx Introdução

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!

Page 39: Javafx Introdução

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

Page 40: Javafx Introdução

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

Page 41: Javafx Introdução

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]

Page 42: Javafx Introdução

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]

Page 43: Javafx Introdução

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]

Page 44: Javafx Introdução

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

Page 45: Javafx Introdução

Inserindo elemento

Modifica a sequência original

insert intoinsert beforeinsert after

Page 46: Javafx Introdução

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

Page 47: Javafx Introdução

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

Page 48: Javafx Introdução

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

Page 49: Javafx Introdução

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

Page 50: Javafx Introdução

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]

Page 51: Javafx Introdução

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

Page 52: Javafx Introdução

Ú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:

Page 53: Javafx Introdução

Funções úteis

binarySearchindexByIdentityindexOfisEqualByContentIdentitymaxminnextIndexByIdentitynextIndexfreverseshufflesort

javafx.util.Sequences

Page 54: Javafx Introdução

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” ]

Page 55: Javafx Introdução

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

Page 56: Javafx Introdução

Expressões

10;

{ 10;}

Trecho de código em JavaFX Scriptque o compilador é capaz de compreender

Expressões equivalentes do tipo Integer

Page 57: Javafx Introdução

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

Page 58: Javafx Introdução

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

Page 59: Javafx Introdução

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

Page 60: Javafx Introdução

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 ]

Page 61: Javafx Introdução

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

Page 62: Javafx Introdução

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

Page 63: Javafx Introdução

O que ainda falta?

• object literal

• binding

• gráficos

• API Não perca...


Recommended