SlideShare uma empresa Scribd logo
JavaFX GUI
      Fábio Nogueira de Lucena
   Instituto de Informática (UFG)
Graduação em Engenharia de Software
  http://engenhariadesoftware.inf.br
Passos para GUI
• Criar um Stage (palco da aplicação)
• Criar uma Scene (sequência de Node)
  com a qual usuários irão interagir
• Criar o conteúdo da Scene (Node[])
• Criar variáveis e classes que representam o
  modelo (model no MVC)
• Criar interação (event handlers)
Primeiro...


• Precisamos conhecer os recursos gráficos...
javafx.scene.control.Button
 Button {
 
 text: "Meu primeiro botão!"
 
 action: function() {}
 }


Documentação de JavaFX (action é um tipo de função)
javafx.scene.control.Button
 Button {
 
 text: "Meu primeiro botão!"
 
 action: function() { FX.exit(); }
 }

             Ao clicar no botão, a aplicação é finalizada!
CheckBox
import javafx.scene.control.CheckBox;

CheckBox {

 text: "Clique para marcar/desmarcar

 selected: true
}

    Inicialmente a opção encontra-se marcada!
Text
import javafx.scene.control.Label;
import javafx.scene.text.Font;
Label {

 text: "Um simples texto!"
   font: Font { size: 30 }
}


 O valor padrão do tamanho da fonte é alterado!
Combinando objetos...

import javafx.scene.control.Label;
import javafx.scene.text.Font;
import javafx.scene.layout.VBox;

VBox {
    content: [
        Label {
            text:   "Um simples texto!"
            font:   Font {size: 30 }
        },
        Label {
            text:   "Outro texto (menor)!"
            font:   Font {size: 20 }
        }]
}
Combinando objetos...
import   javafx.scene.layout.HBox;
import   javafx.scene.shape.Rectangle;
import   javafx.scene.paint.Color;
import   javafx.scene.shape.Circle;

HBox {
    content: [
        Rectangle {
            width: 140, height: 90
            fill: Color.YELLOW
        },
        Circle {
            radius: 40
            fill: Color.GREEN
        }
    ]
}
ImageView
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

var base = "http://engenhariadesoftware.inf.br/publico/";
var arquivo = "logo.png";
var urlRef = bind "{base}{arquivo}";

ImageView {
    image: Image {
        url: urlRef
    }
}
javafx.stage.Stage
javafx.stage.Stage {};




Menor aplicação gráfica em JavaFX!
javafx.stage.Stage
 import javafx.stage.Stage;
 Stage {}


 import javafx.stage.Stage;
 Stage {
     title: "Título da Aplicação (janela)"
     width: 350
     height: 80
     opacity: .6
     resizable: false
 }


Conteúdo é vazio (Scene não foi criada)
Uma imagem no palco
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.*;

var jpg = "http://engenhariadesoftware.inf.br/publico/logo.png";
var imagem = ImageView {
  image: Image { url: jpg }
}

Stage {
    title: "Engenharia de Software"
    scene: Scene { content: imagem }
}


Classes em amarelo, vars de instância em verde
NetBeans IDE 6.9 Beta
Alguns dos possíveis nós...
javafx.scene.text.Text
javafx.scene.image.ImageView
javafx.scene.image.Image
javafx.scene.layout.HBox
javafx.scene.shape.Circle
javafx.scene.shape.Line
javafx.scene.shape.Rectangle
javafx.scene.CustomNode
javafx.scene.Group
Texto
import   javafx.scene.Scene;
import   javafx.scene.text.Text;
import   javafx.scene.text.TextOrigin;
import   javafx.stage.Stage;
import   javafx.scene.text.Font;

Stage {
    scene: Scene {
        content: Text {
            content: "OK"
            textOrigin: TextOrigin.TOP
            font: Font { size: 36 }
        }
    }


                javafx.scene.text.Text
Texto
import javafx.scene.Scene;
import javafx.scene.text.*;
import javafx.stage.Stage;

var msg = "A justiça é a conveniência do mais forte. "
          "(República, Platão).";
Stage {
    scene: Scene {
        content: Text {
            content: msg textOrigin: TextOrigin.TOP
            font: Font { size: 20 } wrappingWidth: 230
            textAlignment: TextAlignment.JUSTIFY
        }
    }
}



               javafx.scene.text.Text
Texto
import javafx.scene.paint.Color;
import javafx.scene.*;
import javafx.scene.text.*;

Stage {
    scene: Scene {
        content: Text {
            content: "Vila Nova"
            textOrigin: TextOrigin.TOP
            font: Font { size: 130 }
            fill: Color.RED
            stroke: Color.BLACK
            strokeWidth: 4
        }
    }
}


               javafx.scene.text.Text
Imagem e texto
import   javafx.scene.image.*;
import   javafx.scene.paint.Color;
import   javafx.scene.*;
import   javafx.scene.text.*;

var server = "www.vilanova.esp.br";
var vn = "http://{server}/pictures/G1342652008113750.jpg";

Stage {
    scene: Scene {
      content: [
         ImageView { image: Image { url: vn } opacity: 0.3 }
         Text { x: 40 y: 140 fill: Color.RED
           content: "Melhor do MundonAno 2036nNão perca!"
           font: Font { size: 60 } textOrigin:TextOrigin.TOP
         }
       ]
    }
}
Javafx Gui
Exibindo o progresso do download...
  svn export http://exemplos.googlecode.com/svn/trunk/javafx/g5 g5
package g5;

import   javafx.scene.*;
import   javafx.scene.image.*;
import   javafx.scene.text.Text;
import   javafx.stage.Stage;

var srv = "grin.hq.nasa.gov";
var nasa = "http://{srv}/IMAGES/SMALL/GPN-2000-001124.jpg";
var img = Image { url: nasa backgroundLoading: true
                placeholder: Image { url: "{__DIR__}aguarde.png" } };
var perc = Text { x: 40 y: 20 content: bind progresso(img.progress) };

function progresso(percentual : Number) : String {
    if (percentual >= 99.9) then "" else "{percentual}%"
}

def cena = Scene { content: [ ImageView { image: img }, perc ] };

Stage { width: 640 height: 649 scene : cena }


 Exibe ‘background’ enquanto ‘jpg’ é carregada
Ok, vamos praticar...

Mais conteúdo relacionado

PDF
Web Offline
PDF
Ionic 2/3 + Firebase
PDF
Mean Stack
PDF
Angular 2
PDF
Typescript: the Fun Parts (BrazilJS 2017)
PDF
Gems para colocar seus testes no trilho
ODP
Java Fx Guia De IntroduçãO
PPT
JavaFx - Guia Prático
Web Offline
Ionic 2/3 + Firebase
Mean Stack
Angular 2
Typescript: the Fun Parts (BrazilJS 2017)
Gems para colocar seus testes no trilho
Java Fx Guia De IntroduçãO
JavaFx - Guia Prático

Semelhante a Javafx Gui (20)

PDF
JavaFx - Introdução
PDF
Introdução ao JavaFX
PDF
React Native - JSday
PDF
Realtime com node.js e socket.io
PPTX
Desvendando as ferramentas e serviços para o desenvolvedor Android
PDF
Canvas element
PDF
Introdução ao JavaFX
PPTX
Introducao a Linguagem Kotlin
ODP
introdução a visão compuutacional com opencv e python
KEY
Javascript + jQuery
PDF
Tutorial WebSocket em Java
KEY
Python 08
PDF
Apresentação Phonegap
PPTX
Java Web Start
PDF
Introdução aos aplicativos tipo canvas
PDF
JavaFX 2
PDF
Introdução ao JavaFX
PDF
Java Web 3 - Servlets e JSP 1
JavaFx - Introdução
Introdução ao JavaFX
React Native - JSday
Realtime com node.js e socket.io
Desvendando as ferramentas e serviços para o desenvolvedor Android
Canvas element
Introdução ao JavaFX
Introducao a Linguagem Kotlin
introdução a visão compuutacional com opencv e python
Javascript + jQuery
Tutorial WebSocket em Java
Python 08
Apresentação Phonegap
Java Web Start
Introdução aos aplicativos tipo canvas
JavaFX 2
Introdução ao JavaFX
Java Web 3 - Servlets e JSP 1
Anúncio

Mais de Fábio Nogueira de Lucena (20)

PDF
Fundamentos de Programação Front-End
PPTX
JavaScript: Aprendendo a programar
PPTX
HTML5: Primeiros Contatos (visão geral)
PDF
HTTP: Um Curso Básico
PDF
Apresentacao curso-2017-08-08
PPTX
Jornada Goiana em Engenharia de Software 2017
PPTX
PPTX
Introducao integracao
PPTX
Healthdb Visão Geral
PPTX
Engenharia de Software - planejamento pedagógico
PPTX
Arquitetura de Software EXPLICADA
PPT
Arquitetura de Software
PPTX
Arquitetura software
PPTX
Prontuário Eletrônico do Paciente
PPTX
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
ODP
Como desenvolver-software
ODP
Orientação a Objetos (3)
Fundamentos de Programação Front-End
JavaScript: Aprendendo a programar
HTML5: Primeiros Contatos (visão geral)
HTTP: Um Curso Básico
Apresentacao curso-2017-08-08
Jornada Goiana em Engenharia de Software 2017
Introducao integracao
Healthdb Visão Geral
Engenharia de Software - planejamento pedagógico
Arquitetura de Software EXPLICADA
Arquitetura de Software
Arquitetura software
Prontuário Eletrônico do Paciente
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Como desenvolver-software
Orientação a Objetos (3)
Anúncio

Último (20)

PPT
Caderno de Boas Práticas dos Professores Alfabetizadores.ppt
PDF
Pecados desdenhados por muita gente (islamismo)
PPTX
5. A cultura do mundo virtual - globalidade.pptx
PPTX
"BPF, PPHO e APPCC na Indústria de Alimentos"
PPSX
4. A Cultura da Catedral - HistóriaCArtes .ppsx
PPTX
BIÓTICOS E ABIOTICOS CADEIA ALIMENTAR.pptx
PDF
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
PPTX
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
PPTX
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
PPT
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
DOCX
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
PPT
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
PPTX
Fronteiras e soberania..........................pptx
PDF
Extintores e Acessórios por Francisco Borges.pdf
PDF
O retorno a origem (islã Islamismo)
PDF
Historia da Gastronomia Mundial por Daianna Marques dos Santos
PDF
Fiqh da adoração (islamismo)
PPTX
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
PDF
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
PPTX
AULA METodologia MODIFIC PART 1 MSC.pptx
Caderno de Boas Práticas dos Professores Alfabetizadores.ppt
Pecados desdenhados por muita gente (islamismo)
5. A cultura do mundo virtual - globalidade.pptx
"BPF, PPHO e APPCC na Indústria de Alimentos"
4. A Cultura da Catedral - HistóriaCArtes .ppsx
BIÓTICOS E ABIOTICOS CADEIA ALIMENTAR.pptx
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
Fronteiras e soberania..........................pptx
Extintores e Acessórios por Francisco Borges.pdf
O retorno a origem (islã Islamismo)
Historia da Gastronomia Mundial por Daianna Marques dos Santos
Fiqh da adoração (islamismo)
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
AULA METodologia MODIFIC PART 1 MSC.pptx

Javafx Gui

  • 1. JavaFX GUI Fábio Nogueira de Lucena Instituto de Informática (UFG) Graduação em Engenharia de Software http://engenhariadesoftware.inf.br
  • 2. Passos para GUI • Criar um Stage (palco da aplicação) • Criar uma Scene (sequência de Node) com a qual usuários irão interagir • Criar o conteúdo da Scene (Node[]) • Criar variáveis e classes que representam o modelo (model no MVC) • Criar interação (event handlers)
  • 3. Primeiro... • Precisamos conhecer os recursos gráficos...
  • 4. javafx.scene.control.Button Button { text: "Meu primeiro botão!" action: function() {} } Documentação de JavaFX (action é um tipo de função)
  • 5. javafx.scene.control.Button Button { text: "Meu primeiro botão!" action: function() { FX.exit(); } } Ao clicar no botão, a aplicação é finalizada!
  • 6. CheckBox import javafx.scene.control.CheckBox; CheckBox { text: "Clique para marcar/desmarcar selected: true } Inicialmente a opção encontra-se marcada!
  • 7. Text import javafx.scene.control.Label; import javafx.scene.text.Font; Label { text: "Um simples texto!" font: Font { size: 30 } } O valor padrão do tamanho da fonte é alterado!
  • 8. Combinando objetos... import javafx.scene.control.Label; import javafx.scene.text.Font; import javafx.scene.layout.VBox; VBox { content: [ Label { text: "Um simples texto!" font: Font {size: 30 } }, Label { text: "Outro texto (menor)!" font: Font {size: 20 } }] }
  • 9. Combinando objetos... import javafx.scene.layout.HBox; import javafx.scene.shape.Rectangle; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; HBox { content: [ Rectangle { width: 140, height: 90 fill: Color.YELLOW }, Circle { radius: 40 fill: Color.GREEN } ] }
  • 10. ImageView import javafx.scene.image.Image; import javafx.scene.image.ImageView; var base = "http://engenhariadesoftware.inf.br/publico/"; var arquivo = "logo.png"; var urlRef = bind "{base}{arquivo}"; ImageView { image: Image { url: urlRef } }
  • 12. javafx.stage.Stage import javafx.stage.Stage; Stage {} import javafx.stage.Stage; Stage { title: "Título da Aplicação (janela)" width: 350 height: 80 opacity: .6 resizable: false } Conteúdo é vazio (Scene não foi criada)
  • 13. Uma imagem no palco import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.image.*; var jpg = "http://engenhariadesoftware.inf.br/publico/logo.png"; var imagem = ImageView { image: Image { url: jpg } } Stage { title: "Engenharia de Software" scene: Scene { content: imagem } } Classes em amarelo, vars de instância em verde
  • 15. Alguns dos possíveis nós... javafx.scene.text.Text javafx.scene.image.ImageView javafx.scene.image.Image javafx.scene.layout.HBox javafx.scene.shape.Circle javafx.scene.shape.Line javafx.scene.shape.Rectangle javafx.scene.CustomNode javafx.scene.Group
  • 16. Texto import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.TextOrigin; import javafx.stage.Stage; import javafx.scene.text.Font; Stage { scene: Scene { content: Text { content: "OK" textOrigin: TextOrigin.TOP font: Font { size: 36 } } } javafx.scene.text.Text
  • 17. Texto import javafx.scene.Scene; import javafx.scene.text.*; import javafx.stage.Stage; var msg = "A justiça é a conveniência do mais forte. " "(República, Platão)."; Stage { scene: Scene { content: Text { content: msg textOrigin: TextOrigin.TOP font: Font { size: 20 } wrappingWidth: 230 textAlignment: TextAlignment.JUSTIFY } } } javafx.scene.text.Text
  • 18. Texto import javafx.scene.paint.Color; import javafx.scene.*; import javafx.scene.text.*; Stage { scene: Scene { content: Text { content: "Vila Nova" textOrigin: TextOrigin.TOP font: Font { size: 130 } fill: Color.RED stroke: Color.BLACK strokeWidth: 4 } } } javafx.scene.text.Text
  • 19. Imagem e texto import javafx.scene.image.*; import javafx.scene.paint.Color; import javafx.scene.*; import javafx.scene.text.*; var server = "www.vilanova.esp.br"; var vn = "http://{server}/pictures/G1342652008113750.jpg"; Stage { scene: Scene { content: [ ImageView { image: Image { url: vn } opacity: 0.3 } Text { x: 40 y: 140 fill: Color.RED content: "Melhor do MundonAno 2036nNão perca!" font: Font { size: 60 } textOrigin:TextOrigin.TOP } ] } }
  • 21. Exibindo o progresso do download... svn export http://exemplos.googlecode.com/svn/trunk/javafx/g5 g5 package g5; import javafx.scene.*; import javafx.scene.image.*; import javafx.scene.text.Text; import javafx.stage.Stage; var srv = "grin.hq.nasa.gov"; var nasa = "http://{srv}/IMAGES/SMALL/GPN-2000-001124.jpg"; var img = Image { url: nasa backgroundLoading: true placeholder: Image { url: "{__DIR__}aguarde.png" } }; var perc = Text { x: 40 y: 20 content: bind progresso(img.progress) }; function progresso(percentual : Number) : String { if (percentual >= 99.9) then "" else "{percentual}%" } def cena = Scene { content: [ ImageView { image: img }, perc ] }; Stage { width: 640 height: 649 scene : cena } Exibe ‘background’ enquanto ‘jpg’ é carregada