SlideShare uma empresa Scribd logo
José Raphael Teixeira Marques   Mestrando em Informática (UFPB)
                                raphaelmarques.wordpress.com
                                joseraphael@di.ufpb.br
   O que é JavaFX?
   Exemplos com JavaFX
   Por que JavaFX?
   JavaFX Script
   GUI com JavaFX Script
   Informações adicionais
   Java “Effects”

   JavaFX é a melhor forma para criar conteúdo
    rico expressivo. Baseado na Plataforma Java,
    JavaFX oferece uma atraente combinação de
    onipresença, capacidade, expressividade e
    performance.



                                                   3
4
5
6
7
Introdução ao JavaFX
9
10
11
12
Introdução ao JavaFX
Introdução ao JavaFX
Introdução ao JavaFX
Introdução ao JavaFX
   Uma única plataforma RIA para todas as telas
   Mercado de amplo alcance
   Workflow designer-desenvolvedor
   Runtime poderoso
   Liberdade do browser
   Compatibilidade com tecnologias Java
   Muito mais poderoso que o Swing
                                                   17
Introdução ao JavaFX
   Tipos de dados básicos (não podem ser null)
       Integer
       Number
       Boolean
       Duration

   String
   Sequence
   Function
                                                  19
var string1 = "raphael";
var string2 : String = "raphael";
var integer1 = 3;
var integer2 : Integer = 3;
var number1 = 3.0;
var number2 : Number = 3;
var number4 = integer1 + number1;
var retorno = algumMetodo();
                                    20
println("raphael marques");
//raphael marques

println('raphael marques');
//raphael marques

println("raphael 'marques'");
//raphael 'marques'

println('raphael "marques"');
//raphael "marques"
                                21
var s1 = "raphael";
var s2 = "marques";
println("{s1} {s2}");
//raphael marques

"o valor de x eh: {x}"
"o valor de x eh: {objeto.getX()}"
"o valor no ponto ({x},{y}) eh {get(x,y)}"
                                             22
var t1 : Duration = 1ms;
var t2 = 1s;
var t3 = 1m;
var t4 = 1h;

var t5 = 1s + 500ms;
var t6 = 1s * 2;
var t7 = 1s / 2;


                           23
def PI = 3.1416;
function calcArea(raio: Number): Number{
  return PI * raio * raio;
}
var raio = 5;
var area = calcArea(raio);




                                           24
def PI = 3.1416;
function calcArea(raio: Number) {
  return PI * raio * raio;
}
var raio = 5;
var area = calcArea(raio);




                                    25
def PI = 3.1416;
function calcArea(raio: Number) {
  PI * raio * raio;
}
var raio = 5;
var area = calcArea(raio);




                                    26
def PI = 3.1416;
var calcArea = function (raio: Number){
   PI * raio * raio;
};
var calcPerimetro = function(raio: Number){
   2 * PI * raio;
};
var calc = calcArea;
println(calc(5));
calc = calcPerimetro;
println(calc(5));

                                              27
var x = 1;
var y = bind x;
var z = bind y * 2;
var w = bind x with inverse;
println("{x} {y} {z} {w}"); //1 1 2 1
x = 2;
println("{x} {y} {z} {w}"); //2 2 4 2



                                        28
var x = 10;
var y = 20;
var rect1 = Rectangle{
   x: bind x;
   y: bind y;
};
var rect2 = bind Rectangle{
   x: x;
   y: y;
};
                              29
var a = 1 on replace old{
 println("changing a");
 println("old value: {old}");
 println("new value: {a}");
};




                                30
var seq1 : Integer[ ] = [1,2,3,4,5,6,7,8,9,10];
var seq2 = [1..10];
var seq3 = [1..10 step 2];
var seq4 = [seq1 , seq2 , seq3];
var seq5 = seq1[4..];
var seq6 = seq1[i | i mod 2 == 0];

Operações:
 insert, delete, reverse, ==
{
    var a = 3;
    ...
    y = a;
}
if(a > 0) {x = a} else {x = a+b};
for(i in [1..5]){
  insert i*i into quadrados;
}
var y = {
  var a = 3;
  ...
  a;
}
var x = if(a > 0) {a} else {a+b};
var quadrados = for(i in [1..5]){
  i*i;
}
Introdução ao JavaFX
public class HelloWorldSwing{
  public static void main(String[] args){
     JFrame frame =
            new JFrame("HelloWorld Swing");
     JLabel label =
            new JLabel("Hello World");
     frame.getContentPane().add(label);
     frame.setDefaultCloseOperation(
            JFrame.EXIT_ON_CLOSE);
     frame.pack();
     frame.setVisible(true);
  }
}
                                              35
Stage {
  title: "Hello World em JavaFX"
  width: 250 height: 80
  scene: Scene {
      content: Text {
        content: "Hello World!"
        x: 10 y: 30
        font : Font {
           size : 24
        }
      }
  }
}

                                   36
Stage{
  title: "Declarar eh facil!"
  width: 250
  height: 250
}




                                37
Stage{
  title: "Declarar eh facil!"
  scene: Scene{
      width: 250
      height: 250
  }
}




                                38
Stage{
  ...
  scene: Scene{
      ...
      content: [
          Rectangle{
            x: 45 y: 45
            width: 160 height: 160
            arcWidth: 15 arcHeight: 15
            fill: Color.GREEN
          }
      ]
  }
}

                                         39
...
content: [
    Rectangle{
      ...
    }
    Circle{
      centerX: 125 centerY: 125
      radius: 90
      fill: Color.WHITE
      stroke: Color.RED
    }
]
...

                                  40
...
content: [
    Circle{
      ...
    }
    Rectangle{
      ...
    }
]
...
                 41
...
content: [
    Circle{
      ...
    }
    Rectangle{
      ...
      opacity: 0.6
    }
]
...
                     42
...
Rectangle{
     ...
    rotate: 15
}
...




                 43
...
Rectangle{
    ...
    effect: Lighting{
        surfaceScale: 5
    }
}
...



                          44
ImageView{
  image: Image{
     url: "{__DIR__}imagem.png"
  }
  rotate: 15
  scaleX: 2
}


                                  45
...
Group{
    translateX: 15           Group
    translateY: 15
    content: [
       Text{
               ...
       }                    Translate
       Circle{
               ...
       }
    ]
}
...                  Text               Circle


                                                 46
var x: Number;             var px: Number;
var y: Number;             var py: Number;
...
Rectangle{
    x: bind x
    y: bind y
    ...
    onMousePressed: function(e: MouseEvent){
         px = x;
         py = y;
    }
    onMouseDragged: function(e: MouseEvent){
         x = px + e.dragX;
         y = px + e.dragY;
    }
}
...
                                               47
48
49
50
Donut{
  x: 100
  y: 100
  raioExterno: 80
  raioInterno: 50
  fill: Color.RED
  stroke: Color.BLACK
}

                        51
var timeline = Timeline {
   keyFrames : [
     KeyFrame {
          time: 2s
          values : variavel => 100
               tween Interpolator.LINEAR
     }
   ]
};
timeline.play();

                                           52
53
54
55
56
57
   Stack:




             58
59
   Suporte para RSS e ATOM feeds
   Suporte a múltiplas telas
   Armazenamento local
   Herança múltipla
   Algumas palavras “reservadas” não são mais
    reservadas
     init, step, replace, etc...
Main.fx:
 Locale.setDefault(Locale.ENGLISH);
 ...
 var button = Button{
     text: ##“enviar”
 }

Main_en.fxproperties:
 “enviar” = “send”
Introdução ao JavaFX
   Distribuição:
     Carregamento do Applet
     JavaWebStart em inglês
     JavaFX Runtime online na 1ª vez
     Java Runtime maior

   Integração com Java:
     Bind com objetos Java


                                        63
   JavaFX
     http://javafx.com/

   JavaFX Developer Home
     http://java.sun.com/javafx/

   JavaFX Programing (with Passion!)
     http://www.javapassion.com/javafx/



                                           64
   Windows, Linux, Mac OS X e Solaris x86
     Windows Mobile 6
   JavaFX 1.2.1 SDK
   Netbeans IDE 6.7.1 para JavaFX 1.2
   JavaFX 1.2 Eclipse-plugin
   JavaFX 1.2 Production Suite
     Plugin para Adobe Illustrator e Adobe Photoshop
     Media Factory
      ▪ JavaFX Graphics Viewer e SVG Converter


                                                        65
   De terceiros:
       Framework MVC (Griffon)
       DataBox
       CRUDFx
       FXtras
       WidgetFX
   Da Sun:
     Investimento da Sun/Oracle
     JavaFX Mobile e JavaFX TV
     Java Autoring Tool (vídeo no final)
        ▪ Vídeo


                                            66
   Prós:
     JavaFX tem um grande potencial
     Workflow designer-desenvolvedor
     A comunidade está ativa
     A corrida está só começando

   Contras:
     Ainda tem muito o que evoluir
     Problema na distribuição
                                        67
José Raphael Teixeira Marques   Mestrando em Informática (UFPB)
                                raphaelmarques.wordpress.com
                                joseraphael@di.ufpb.br
Anúncio

Mais conteúdo relacionado

Mais procurados (16)

[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
Loiane Groner
 
Java ME - Game API
Java ME - Game APIJava ME - Game API
Java ME - Game API
Daniel De Macedo
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
Andrews Medina
 
Persistência com Realm.io
Persistência com Realm.ioPersistência com Realm.io
Persistência com Realm.io
Onyo
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
Loiane Groner
 
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Paulo Henrique Lerbach Rodrigues
 
Curso de Matlab avancado 2
Curso de Matlab avancado 2Curso de Matlab avancado 2
Curso de Matlab avancado 2
Gabriel Costa
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
thomasdacosta
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1
Gabriel Costa
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das Galáxias
Maurício Aniche
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Paulo Henrique Lerbach Rodrigues
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
Phil Calçado
 
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
Loiane Groner
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
jeandson correa
 
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a CoroutinesTDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
tdc-globalcode
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de Jogo
Bruno Cicanci
 
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
Loiane Groner
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
Andrews Medina
 
Persistência com Realm.io
Persistência com Realm.ioPersistência com Realm.io
Persistência com Realm.io
Onyo
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
Loiane Groner
 
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Sobrecarga e invocação de métodos - Preparatório Certificação - OCAJP7 - Aula...
Paulo Henrique Lerbach Rodrigues
 
Curso de Matlab avancado 2
Curso de Matlab avancado 2Curso de Matlab avancado 2
Curso de Matlab avancado 2
Gabriel Costa
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
thomasdacosta
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1
Gabriel Costa
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das Galáxias
Maurício Aniche
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Paulo Henrique Lerbach Rodrigues
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
Phil Calçado
 
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
Loiane Groner
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
jeandson correa
 
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a CoroutinesTDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
tdc-globalcode
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de Jogo
Bruno Cicanci
 

Destaque (20)

Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Raphael Marques
 
Mini-curso JavaFX Aula3 UFPB
Mini-curso JavaFX Aula3 UFPBMini-curso JavaFX Aula3 UFPB
Mini-curso JavaFX Aula3 UFPB
Raphael Marques
 
Mini-curso JavaFX Aula2
Mini-curso JavaFX Aula2Mini-curso JavaFX Aula2
Mini-curso JavaFX Aula2
Raphael Marques
 
Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1
Raphael Marques
 
JavaFX
JavaFXJavaFX
JavaFX
Raphael Marques
 
JavaFX
JavaFXJavaFX
JavaFX
Raphael Marques
 
Classes Internas
Classes InternasClasses Internas
Classes Internas
Raphael Marques
 
Operadores Java
Operadores JavaOperadores Java
Operadores Java
Raphael Marques
 
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFXTweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Bruno Borges
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEB
jesuinoPower
 
Como ingressar no mercado de Machine Learning
Como ingressar no mercado de Machine LearningComo ingressar no mercado de Machine Learning
Como ingressar no mercado de Machine Learning
Gabriel Cypriano Saca
 
Aprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e RAprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e R
Diego Nogare
 
Introdução ao Machine Learning para Hackers
Introdução ao Machine Learning para HackersIntrodução ao Machine Learning para Hackers
Introdução ao Machine Learning para Hackers
Gabriel Cypriano Saca
 
Machine Learning - Introdução e Aplicações
Machine Learning - Introdução e AplicaçõesMachine Learning - Introdução e Aplicações
Machine Learning - Introdução e Aplicações
Dionisio Chiuratto Agourakis
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
jesuinoPower
 
Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutos
Bruno Oliveira
 
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Bruno Borges
 
JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Prático
danielfc
 
JavaFX Presentation
JavaFX PresentationJavaFX Presentation
JavaFX Presentation
Mochamad Taufik Mulyadi
 
Aplicações Práticas de Machine Learning
Aplicações Práticas de Machine LearningAplicações Práticas de Machine Learning
Aplicações Práticas de Machine Learning
Luiz Costa
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Raphael Marques
 
Mini-curso JavaFX Aula3 UFPB
Mini-curso JavaFX Aula3 UFPBMini-curso JavaFX Aula3 UFPB
Mini-curso JavaFX Aula3 UFPB
Raphael Marques
 
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFXTweet4Beer - Beertap powered by Java goes IoT and JavaFX
Tweet4Beer - Beertap powered by Java goes IoT and JavaFX
Bruno Borges
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEB
jesuinoPower
 
Como ingressar no mercado de Machine Learning
Como ingressar no mercado de Machine LearningComo ingressar no mercado de Machine Learning
Como ingressar no mercado de Machine Learning
Gabriel Cypriano Saca
 
Aprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e RAprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e R
Diego Nogare
 
Introdução ao Machine Learning para Hackers
Introdução ao Machine Learning para HackersIntrodução ao Machine Learning para Hackers
Introdução ao Machine Learning para Hackers
Gabriel Cypriano Saca
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
jesuinoPower
 
Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutos
Bruno Oliveira
 
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Bruno Borges
 
JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Prático
danielfc
 
Aplicações Práticas de Machine Learning
Aplicações Práticas de Machine LearningAplicações Práticas de Machine Learning
Aplicações Práticas de Machine Learning
Luiz Costa
 
Anúncio

Semelhante a Introdução ao JavaFX (20)

JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
Elenilson Vieira
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
Rafael Afonso
 
JavaFX and Scala - Like Milk and Cookies - Brazil
JavaFX and Scala - Like Milk and Cookies - BrazilJavaFX and Scala - Like Milk and Cookies - Brazil
JavaFX and Scala - Like Milk and Cookies - Brazil
Stephen Chin
 
JavaFX SestInfo 2010
JavaFX SestInfo 2010JavaFX SestInfo 2010
JavaFX SestInfo 2010
Eder Magalhães
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
Fábio Nogueira de Lucena
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
Denis Costa
 
Bubble Sort Classe Java
Bubble Sort Classe JavaBubble Sort Classe Java
Bubble Sort Classe Java
Elaine Cecília Gatto
 
iOS 8 com swift
iOS 8 com swiftiOS 8 com swift
iOS 8 com swift
Alexandre Rocha Lima e Marcondes
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
Victor Hugo Germano
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Embarcados
 
Design OO
Design OODesign OO
Design OO
Mauricio De Diana
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Rafael Ponte
 
Javafx Gui
Javafx GuiJavafx Gui
Javafx Gui
Fábio Nogueira de Lucena
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
Emerson Cardoso
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
Cristiano Pires Martins
 
Scala no Android
Scala no AndroidScala no Android
Scala no Android
André Carvalho
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeans
okashi24
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Daniel Elektron !
 
Javascript
JavascriptJavascript
Javascript
Fernando Simeone
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
Rodrigo Branas
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
Rafael Afonso
 
JavaFX and Scala - Like Milk and Cookies - Brazil
JavaFX and Scala - Like Milk and Cookies - BrazilJavaFX and Scala - Like Milk and Cookies - Brazil
JavaFX and Scala - Like Milk and Cookies - Brazil
Stephen Chin
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
Denis Costa
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Embarcados
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Rafael Ponte
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
Emerson Cardoso
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeans
okashi24
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Daniel Elektron !
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
Rodrigo Branas
 
Anúncio

Mais de Raphael Marques (11)

Sistemas numéricos
Sistemas numéricosSistemas numéricos
Sistemas numéricos
Raphael Marques
 
Windows explorer
Windows explorerWindows explorer
Windows explorer
Raphael Marques
 
Interface do windows
Interface do windowsInterface do windows
Interface do windows
Raphael Marques
 
Internet
InternetInternet
Internet
Raphael Marques
 
Introdução a Informática - Arquitetura
Introdução a Informática - ArquiteturaIntrodução a Informática - Arquitetura
Introdução a Informática - Arquitetura
Raphael Marques
 
O que você produz além de código?
O que você produz além de código?O que você produz além de código?
O que você produz além de código?
Raphael Marques
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Raphael Marques
 
Slides de PDI 2009 - Raphael Update 5
Slides de PDI 2009 - Raphael Update 5Slides de PDI 2009 - Raphael Update 5
Slides de PDI 2009 - Raphael Update 5
Raphael Marques
 
slides PDI 2007 leonardo
slides PDI 2007 leonardoslides PDI 2007 leonardo
slides PDI 2007 leonardo
Raphael Marques
 
Slides PDI 2009 Raphael versao4
Slides PDI 2009 Raphael versao4Slides PDI 2009 Raphael versao4
Slides PDI 2009 Raphael versao4
Raphael Marques
 
Minicurso Java && Cl
Minicurso Java && ClMinicurso Java && Cl
Minicurso Java && Cl
Raphael Marques
 
Introdução a Informática - Arquitetura
Introdução a Informática - ArquiteturaIntrodução a Informática - Arquitetura
Introdução a Informática - Arquitetura
Raphael Marques
 
O que você produz além de código?
O que você produz além de código?O que você produz além de código?
O que você produz além de código?
Raphael Marques
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Raphael Marques
 
Slides de PDI 2009 - Raphael Update 5
Slides de PDI 2009 - Raphael Update 5Slides de PDI 2009 - Raphael Update 5
Slides de PDI 2009 - Raphael Update 5
Raphael Marques
 
slides PDI 2007 leonardo
slides PDI 2007 leonardoslides PDI 2007 leonardo
slides PDI 2007 leonardo
Raphael Marques
 
Slides PDI 2009 Raphael versao4
Slides PDI 2009 Raphael versao4Slides PDI 2009 Raphael versao4
Slides PDI 2009 Raphael versao4
Raphael Marques
 

Último (15)

Venha Aprender Sobre MuleSoft - Dia 07.pptx
Venha Aprender Sobre MuleSoft - Dia 07.pptxVenha Aprender Sobre MuleSoft - Dia 07.pptx
Venha Aprender Sobre MuleSoft - Dia 07.pptx
Renato de Oliveira
 
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptxAC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
Susana Cascais
 
Tabelas e Planilhas com apresentação em Dashboard
Tabelas e Planilhas com apresentação em DashboardTabelas e Planilhas com apresentação em Dashboard
Tabelas e Planilhas com apresentação em Dashboard
Hugo Dourado Graçano
 
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptxVenha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Renato de Oliveira
 
AutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamentalAutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamental
DayaneSoares55
 
Venha Aprender Sobre MuleSoft - Dia 06.pptx
Venha Aprender Sobre MuleSoft - Dia 06.pptxVenha Aprender Sobre MuleSoft - Dia 06.pptx
Venha Aprender Sobre MuleSoft - Dia 06.pptx
Renato de Oliveira
 
Aula de Python - Modularização e Funções.pptx
Aula de Python - Modularização e Funções.pptxAula de Python - Modularização e Funções.pptx
Aula de Python - Modularização e Funções.pptx
ArturGuia1
 
Introdução a Informática basica conceitos basicos .pptx
Introdução  a Informática basica conceitos basicos .pptxIntrodução  a Informática basica conceitos basicos .pptx
Introdução a Informática basica conceitos basicos .pptx
OrlandoCanchipande1
 
CNEN_3012024.pdf_.pdf normas de proteção radiológica
CNEN_3012024.pdf_.pdf  normas de proteção radiológicaCNEN_3012024.pdf_.pdf  normas de proteção radiológica
CNEN_3012024.pdf_.pdf normas de proteção radiológica
myespaco
 
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptxVenha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Renato de Oliveira
 
Slide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdfSlide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdf
FtGames1
 
Apres-Hidraulica e seus componentes: válvulas, etc...
Apres-Hidraulica e seus componentes: válvulas, etc...Apres-Hidraulica e seus componentes: válvulas, etc...
Apres-Hidraulica e seus componentes: válvulas, etc...
portodesantacruz80
 
03-poo1-uml.pdf Apresentacao UML POOL UML
03-poo1-uml.pdf Apresentacao UML POOL UML03-poo1-uml.pdf Apresentacao UML POOL UML
03-poo1-uml.pdf Apresentacao UML POOL UML
ssuser426fcf
 
Venha Apender Sobre MuleSoft - Dia 09.pptx
Venha Apender Sobre MuleSoft - Dia 09.pptxVenha Apender Sobre MuleSoft - Dia 09.pptx
Venha Apender Sobre MuleSoft - Dia 09.pptx
Renato de Oliveira
 
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdfA-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
MarioAthayde
 
Venha Aprender Sobre MuleSoft - Dia 07.pptx
Venha Aprender Sobre MuleSoft - Dia 07.pptxVenha Aprender Sobre MuleSoft - Dia 07.pptx
Venha Aprender Sobre MuleSoft - Dia 07.pptx
Renato de Oliveira
 
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptxAC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
Susana Cascais
 
Tabelas e Planilhas com apresentação em Dashboard
Tabelas e Planilhas com apresentação em DashboardTabelas e Planilhas com apresentação em Dashboard
Tabelas e Planilhas com apresentação em Dashboard
Hugo Dourado Graçano
 
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptxVenha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Renato de Oliveira
 
AutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamentalAutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamental
DayaneSoares55
 
Venha Aprender Sobre MuleSoft - Dia 06.pptx
Venha Aprender Sobre MuleSoft - Dia 06.pptxVenha Aprender Sobre MuleSoft - Dia 06.pptx
Venha Aprender Sobre MuleSoft - Dia 06.pptx
Renato de Oliveira
 
Aula de Python - Modularização e Funções.pptx
Aula de Python - Modularização e Funções.pptxAula de Python - Modularização e Funções.pptx
Aula de Python - Modularização e Funções.pptx
ArturGuia1
 
Introdução a Informática basica conceitos basicos .pptx
Introdução  a Informática basica conceitos basicos .pptxIntrodução  a Informática basica conceitos basicos .pptx
Introdução a Informática basica conceitos basicos .pptx
OrlandoCanchipande1
 
CNEN_3012024.pdf_.pdf normas de proteção radiológica
CNEN_3012024.pdf_.pdf  normas de proteção radiológicaCNEN_3012024.pdf_.pdf  normas de proteção radiológica
CNEN_3012024.pdf_.pdf normas de proteção radiológica
myespaco
 
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptxVenha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Renato de Oliveira
 
Slide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdfSlide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdf
FtGames1
 
Apres-Hidraulica e seus componentes: válvulas, etc...
Apres-Hidraulica e seus componentes: válvulas, etc...Apres-Hidraulica e seus componentes: válvulas, etc...
Apres-Hidraulica e seus componentes: válvulas, etc...
portodesantacruz80
 
03-poo1-uml.pdf Apresentacao UML POOL UML
03-poo1-uml.pdf Apresentacao UML POOL UML03-poo1-uml.pdf Apresentacao UML POOL UML
03-poo1-uml.pdf Apresentacao UML POOL UML
ssuser426fcf
 
Venha Apender Sobre MuleSoft - Dia 09.pptx
Venha Apender Sobre MuleSoft - Dia 09.pptxVenha Apender Sobre MuleSoft - Dia 09.pptx
Venha Apender Sobre MuleSoft - Dia 09.pptx
Renato de Oliveira
 
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdfA-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
A-Evolucao-das-Fontes-no-Windows-Uma-Jornada-Tipografica.pdf
MarioAthayde
 

Introdução ao JavaFX

  • 1. José Raphael Teixeira Marques Mestrando em Informática (UFPB) raphaelmarques.wordpress.com [email protected]
  • 2. O que é JavaFX?  Exemplos com JavaFX  Por que JavaFX?  JavaFX Script  GUI com JavaFX Script  Informações adicionais
  • 3. Java “Effects”  JavaFX é a melhor forma para criar conteúdo rico expressivo. Baseado na Plataforma Java, JavaFX oferece uma atraente combinação de onipresença, capacidade, expressividade e performance. 3
  • 4. 4
  • 5. 5
  • 6. 6
  • 7. 7
  • 9. 9
  • 10. 10
  • 11. 11
  • 12. 12
  • 17. Uma única plataforma RIA para todas as telas  Mercado de amplo alcance  Workflow designer-desenvolvedor  Runtime poderoso  Liberdade do browser  Compatibilidade com tecnologias Java  Muito mais poderoso que o Swing 17
  • 19. Tipos de dados básicos (não podem ser null)  Integer  Number  Boolean  Duration  String  Sequence  Function 19
  • 20. var string1 = "raphael"; var string2 : String = "raphael"; var integer1 = 3; var integer2 : Integer = 3; var number1 = 3.0; var number2 : Number = 3; var number4 = integer1 + number1; var retorno = algumMetodo(); 20
  • 21. println("raphael marques"); //raphael marques println('raphael marques'); //raphael marques println("raphael 'marques'"); //raphael 'marques' println('raphael "marques"'); //raphael "marques" 21
  • 22. var s1 = "raphael"; var s2 = "marques"; println("{s1} {s2}"); //raphael marques "o valor de x eh: {x}" "o valor de x eh: {objeto.getX()}" "o valor no ponto ({x},{y}) eh {get(x,y)}" 22
  • 23. var t1 : Duration = 1ms; var t2 = 1s; var t3 = 1m; var t4 = 1h; var t5 = 1s + 500ms; var t6 = 1s * 2; var t7 = 1s / 2; 23
  • 24. def PI = 3.1416; function calcArea(raio: Number): Number{ return PI * raio * raio; } var raio = 5; var area = calcArea(raio); 24
  • 25. def PI = 3.1416; function calcArea(raio: Number) { return PI * raio * raio; } var raio = 5; var area = calcArea(raio); 25
  • 26. def PI = 3.1416; function calcArea(raio: Number) { PI * raio * raio; } var raio = 5; var area = calcArea(raio); 26
  • 27. def PI = 3.1416; var calcArea = function (raio: Number){ PI * raio * raio; }; var calcPerimetro = function(raio: Number){ 2 * PI * raio; }; var calc = calcArea; println(calc(5)); calc = calcPerimetro; println(calc(5)); 27
  • 28. var x = 1; var y = bind x; var z = bind y * 2; var w = bind x with inverse; println("{x} {y} {z} {w}"); //1 1 2 1 x = 2; println("{x} {y} {z} {w}"); //2 2 4 2 28
  • 29. var x = 10; var y = 20; var rect1 = Rectangle{ x: bind x; y: bind y; }; var rect2 = bind Rectangle{ x: x; y: y; }; 29
  • 30. var a = 1 on replace old{ println("changing a"); println("old value: {old}"); println("new value: {a}"); }; 30
  • 31. var seq1 : Integer[ ] = [1,2,3,4,5,6,7,8,9,10]; var seq2 = [1..10]; var seq3 = [1..10 step 2]; var seq4 = [seq1 , seq2 , seq3]; var seq5 = seq1[4..]; var seq6 = seq1[i | i mod 2 == 0]; Operações: insert, delete, reverse, ==
  • 32. { var a = 3; ... y = a; } if(a > 0) {x = a} else {x = a+b}; for(i in [1..5]){ insert i*i into quadrados; }
  • 33. var y = { var a = 3; ... a; } var x = if(a > 0) {a} else {a+b}; var quadrados = for(i in [1..5]){ i*i; }
  • 35. public class HelloWorldSwing{ public static void main(String[] args){ JFrame frame = new JFrame("HelloWorld Swing"); JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } 35
  • 36. Stage { title: "Hello World em JavaFX" width: 250 height: 80 scene: Scene { content: Text { content: "Hello World!" x: 10 y: 30 font : Font { size : 24 } } } } 36
  • 37. Stage{ title: "Declarar eh facil!" width: 250 height: 250 } 37
  • 38. Stage{ title: "Declarar eh facil!" scene: Scene{ width: 250 height: 250 } } 38
  • 39. Stage{ ... scene: Scene{ ... content: [ Rectangle{ x: 45 y: 45 width: 160 height: 160 arcWidth: 15 arcHeight: 15 fill: Color.GREEN } ] } } 39
  • 40. ... content: [ Rectangle{ ... } Circle{ centerX: 125 centerY: 125 radius: 90 fill: Color.WHITE stroke: Color.RED } ] ... 40
  • 41. ... content: [ Circle{ ... } Rectangle{ ... } ] ... 41
  • 42. ... content: [ Circle{ ... } Rectangle{ ... opacity: 0.6 } ] ... 42
  • 43. ... Rectangle{ ... rotate: 15 } ... 43
  • 44. ... Rectangle{ ... effect: Lighting{ surfaceScale: 5 } } ... 44
  • 45. ImageView{ image: Image{ url: "{__DIR__}imagem.png" } rotate: 15 scaleX: 2 } 45
  • 46. ... Group{ translateX: 15 Group translateY: 15 content: [ Text{ ... } Translate Circle{ ... } ] } ... Text Circle 46
  • 47. var x: Number; var px: Number; var y: Number; var py: Number; ... Rectangle{ x: bind x y: bind y ... onMousePressed: function(e: MouseEvent){ px = x; py = y; } onMouseDragged: function(e: MouseEvent){ x = px + e.dragX; y = px + e.dragY; } } ... 47
  • 48. 48
  • 49. 49
  • 50. 50
  • 51. Donut{ x: 100 y: 100 raioExterno: 80 raioInterno: 50 fill: Color.RED stroke: Color.BLACK } 51
  • 52. var timeline = Timeline { keyFrames : [ KeyFrame { time: 2s values : variavel => 100 tween Interpolator.LINEAR } ] }; timeline.play(); 52
  • 53. 53
  • 54. 54
  • 55. 55
  • 56. 56
  • 57. 57
  • 58. Stack: 58
  • 59. 59
  • 60. Suporte para RSS e ATOM feeds  Suporte a múltiplas telas  Armazenamento local  Herança múltipla  Algumas palavras “reservadas” não são mais reservadas  init, step, replace, etc...
  • 61. Main.fx: Locale.setDefault(Locale.ENGLISH); ... var button = Button{ text: ##“enviar” } Main_en.fxproperties: “enviar” = “send”
  • 63. Distribuição:  Carregamento do Applet  JavaWebStart em inglês  JavaFX Runtime online na 1ª vez  Java Runtime maior  Integração com Java:  Bind com objetos Java 63
  • 64. JavaFX  http://javafx.com/  JavaFX Developer Home  http://java.sun.com/javafx/  JavaFX Programing (with Passion!)  http://www.javapassion.com/javafx/ 64
  • 65. Windows, Linux, Mac OS X e Solaris x86  Windows Mobile 6  JavaFX 1.2.1 SDK  Netbeans IDE 6.7.1 para JavaFX 1.2  JavaFX 1.2 Eclipse-plugin  JavaFX 1.2 Production Suite  Plugin para Adobe Illustrator e Adobe Photoshop  Media Factory ▪ JavaFX Graphics Viewer e SVG Converter 65
  • 66. De terceiros:  Framework MVC (Griffon)  DataBox  CRUDFx  FXtras  WidgetFX  Da Sun:  Investimento da Sun/Oracle  JavaFX Mobile e JavaFX TV  Java Autoring Tool (vídeo no final) ▪ Vídeo 66
  • 67. Prós:  JavaFX tem um grande potencial  Workflow designer-desenvolvedor  A comunidade está ativa  A corrida está só começando  Contras:  Ainda tem muito o que evoluir  Problema na distribuição 67
  • 68. José Raphael Teixeira Marques Mestrando em Informática (UFPB) raphaelmarques.wordpress.com [email protected]