{"id":1627,"date":"2024-03-12T08:48:03","date_gmt":"2024-03-12T08:48:03","guid":{"rendered":"https:\/\/iscodigo.com\/blog\/?p=1627"},"modified":"2024-03-12T09:11:20","modified_gmt":"2024-03-12T09:11:20","slug":"introduccion-a-javafx","status":"publish","type":"post","link":"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/","title":{"rendered":"Introducci\u00f3n a JavaFX"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/#Algunos_Recursos\" title=\"Algunos Recursos\">Algunos Recursos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/#Caracteristicas\" title=\"Caracter\u00edsticas\">Caracter\u00edsticas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/#Esquema_Basico_de_una_Aplicacion\" title=\"Esquema B\u00e1sico de una Aplicaci\u00f3n\">Esquema B\u00e1sico de una Aplicaci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/#Ejemplo\" title=\"Ejemplo\">Ejemplo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/iscodigo.com\/blog\/java\/introduccion-a-javafx\/#Referencia\" title=\"Referencia\">Referencia<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Algunos_Recursos\"><\/span>Algunos Recursos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>JavaFX permite crear aplicaciones Java con una interfaz de usuario moderna, acelerada por hardware y altamente portable.<\/p>\n\n\n\n<p>Existe una&nbsp;<a href=\"https:\/\/docs.oracle.com\/javase\/8\/javase-clienttechnologies.htm\">documentaci\u00f3n<\/a>&nbsp;de referencia detallada para JavaFX.<\/p>\n\n\n\n<p>Para obtener informaci\u00f3n sobre c\u00f3mo ejecutar aplicaciones JavaFX en plataformas m\u00f3viles, consulte<a href=\"https:\/\/docs.gluonhq.com\/#_getting_started\">&nbsp;Introducci\u00f3n a Gluon Mobile<\/a>.<\/p>\n\n\n\n<p>Para obtener informaci\u00f3n sobre el soporte a largo plazo (LTS) para JavaFX 11, consulte las opciones de&nbsp;<a href=\"https:\/\/gluonhq.com\/services\/javafx-support\/\">soporte a largo plazo de JavaFX<\/a>.<\/p>\n\n\n\n<p>JavaFX se construye sobre JDK y es un componente independiente. Hay dos opciones diferentes para desarrollar aplicaciones JavaFX:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilizar el SDK de JavaFX. A partir de JDK 11, JavaFX no viene incluido, as\u00ed que es necesario instalarlo.<\/li>\n\n\n\n<li>Utilizar un sistema de compilaci\u00f3n (por ejemplo: maven\/gradle) para descargar los m\u00f3dulos necesarios desde Maven Central (eligiendo tambi\u00e9n entre las mismas versiones mencionadas).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Caracteristicas\"><\/span>Caracter\u00edsticas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>APIs de Java.<\/strong>&nbsp;JavaFX es una biblioteca Java que consiste en clases e interfaces que est\u00e1n escritas en c\u00f3digo Java. Las APIs est\u00e1n dise\u00f1adas para ser una alternativa amigable con la m\u00e1quina virtual de Java (Java VM) como los lenguajes JRuby, y Scala.<\/li>\n\n\n\n<li><strong>FXML y Scene Builder.<\/strong>&nbsp;FXML es un lenguaje de marcado declarativo basado en XML para la construcci\u00f3n de una interfaz de usuario de aplicaciones JavaFX. Un dise\u00f1ador puede codificar en FXML o utilizar JavaFX Scene Builder para dise\u00f1ar de forma interactiva la interfaz gr\u00e1fica de usuario (GUI). Scene Builder genera marcado FXML que pueden ser portado a un IDE para que un desarrollador pueda a\u00f1adir la l\u00f3gica de negocio.<\/li>\n\n\n\n<li><strong>WebView.<\/strong>&nbsp;Un componente web que utiliza la tecnolog\u00eda WebKitHTML para hacer posible incrustar(embeber), p\u00e1ginas web dentro de una aplicaci\u00f3n JavaFX. JavaScript se ejecuta dentro de un WebView y se puede llamar a las APIs de Java y las APIs de Java pueden llamar a JavaScript que se ejecuta dentro de un WebView. Compatibilidad con caracter\u00edsticas adicionales de HTML5, incluyendo Web Sockets, Web Workers y fuentes Web.<\/li>\n\n\n\n<li><strong>Interoperabilidad Swing.<\/strong>&nbsp;Las aplicaciones Swing existentes pueden ser actualizadas con las caracter\u00edsticas de JavaFX, como gr\u00e1ficos multimedia enriquecidos de reproducci\u00f3n y el contenido web incorporado. La clase SwingNode, que le permite incluir contenido dentro de aplicaciones JavaFX.<\/li>\n\n\n\n<li><strong>Controles de interfaz de usuario(UI) incorporados(Builtin) y CSS.<\/strong>&nbsp;JavaFX ofrece todos los principales controles UI que se requieren para desarrollar una aplicaci\u00f3n con todas las caracter\u00edsticas necesarias. Los componentes pueden ser decorados con las tecnolog\u00edas Web est\u00e1ndar como CSS.<\/li>\n\n\n\n<li><strong>API Canvas.<\/strong>&nbsp;La API de Canvas permite dibujar directamente dentro de un \u00e1rea de la scene JavaFX que consta de un elemento gr\u00e1fico (nodo).<\/li>\n\n\n\n<li><strong>Soporte multitouch.<\/strong>&nbsp;JavaFX proporciona apoyo a las operaciones multitouch, con base en las capacidades de la plataforma subyacente.<\/li>\n\n\n\n<li><strong>Aceleraci\u00f3n por hardware con canalizaci\u00f3n de gr\u00e1ficos.<\/strong>&nbsp;Los gr\u00e1ficos JavaFX se basan en el canal de renderizado de gr\u00e1ficos (el hilo Prism). JavaFX ofrece gr\u00e1ficos suaves(smooth) que hacen que r\u00e1pidamente a trav\u00e9s el hilo Prism cuando se utiliza con una tarjeta de gr\u00e1ficos compatible o unidad de procesamiento de gr\u00e1ficos (GPU). Si un sistema no dispone de una de las GPUs recomendadas soportados por JavaFX, recibe el valor predeterminado el hilo Prism a la pila de software de renderizaci\u00f3n.<\/li>\n\n\n\n<li><strong>Motor de medios de alto rendimiento.<\/strong>&nbsp;El oleoducto multimedia es compatible con la reproducci\u00f3n de contenido multimedia en la Web. Proporciona un marco multimedia estable, de baja latencia que se basa en el framework multimedia GStreamer.<\/li>\n\n\n\n<li><strong>Modelo de implementaci\u00f3n de aplicaciones independiente del S.O.<\/strong>&nbsp;Paquetes de aplicaciones aut\u00f3nomas tienen todos los recursos de la aplicaci\u00f3n, y una copia privada de los tiempos de ejecuci\u00f3n de Java y JavaFX. Se distribuyen en forma de paquetes instalables nativos como por ejemplo .dmg, .deb .exe .etc. y proporcionan la misma instalaci\u00f3n y la experiencia puesta en marcha como aplicaciones nativas para ese sistema operativo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Esquema_Basico_de_una_Aplicacion\"><\/span>Esquema B\u00e1sico de una Aplicaci\u00f3n<br><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"459\" height=\"491\" src=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-4.png?resize=459%2C491&#038;ssl=1\" alt=\"\" class=\"wp-image-1634\" srcset=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-4.png?w=459&amp;ssl=1 459w, https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-4.png?resize=280%2C300&amp;ssl=1 280w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><figcaption class=\"wp-element-caption\">Fig. 1: Jerarqu\u00eda en JavaFx<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Como se puede observar en la figura, una aplicaci\u00f3n de JavaFX es un \u00e1rbol donde el elemento principal es un&nbsp;<strong>Stage<\/strong>. A continuaci\u00f3n, se nombran las clases \/ definiciones relevantes:<\/li>\n\n\n\n<li><strong>Application:<\/strong>&nbsp;esto maneja el flujo de trabajo de la aplicaci\u00f3n, la inicializaci\u00f3n y los par\u00e1metros de la l\u00ednea de comandos<\/li>\n\n\n\n<li><strong>Stage:<\/strong>&nbsp;es una representaci\u00f3n JavaFX de una ventana nativa del sistema operativo. En cualquier momento, un stage puede tener una sola escena adjunta.<\/li>\n\n\n\n<li><strong>Scene:<\/strong>&nbsp;es un contenedor para otros componentes. Solo puede existir un Scene para un Stage. Y solo puede existir un nodo ra\u00edz asociado a una Scene. Los nodos pueden ser contenedores o componentes.<\/li>\n\n\n\n<li><strong>SceneGraph:<\/strong>&nbsp;es el contenido de una Scene.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ejemplo\"><\/span>Ejemplo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"251\" height=\"382\" src=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-1.png?resize=251%2C382&#038;ssl=1\" alt=\"\" class=\"wp-image-1629\" srcset=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-1.png?w=251&amp;ssl=1 251w, https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-1.png?resize=197%2C300&amp;ssl=1 197w\" sizes=\"auto, (max-width: 251px) 100vw, 251px\" \/><figcaption class=\"wp-element-caption\">Fig. 2: Ejemplo de aplicaci\u00f3n<\/figcaption><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism on-numbers lang-csharp\" data-lang=\"C#\"><code>public class HelloApp extends Application {\n \n    private Parent createContent() {\n        return new StackPane(new Text(&quot;Hello World&quot;));\n    }\n \n    @Override\n    public void start(Stage stage) throws Exception {\n        stage.setScene(\n            new Scene(createContent(), 300, 300)\n        );\n        stage.show();\n    }\n \n    public static void main(String[] args) {\n        launch(args);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"341\" src=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-2.png?resize=313%2C341&#038;ssl=1\" alt=\"\" class=\"wp-image-1630\" srcset=\"https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-2.png?w=313&amp;ssl=1 313w, https:\/\/i0.wp.com\/iscodigo.com\/blog\/wp-content\/uploads\/2024\/03\/image-2.png?resize=275%2C300&amp;ssl=1 275w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><figcaption class=\"wp-element-caption\">Fig. 3: Ventana<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Referencia\"><\/span>Referencia<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>https:\/\/openjfx.io\/openjfx-docs\/<\/li>\n\n\n\n<li>https:\/\/docs.oracle.com\/javase\/8\/javafx\/get-started-tutorial\/jfx-overview.htm#JFXST784<\/li>\n\n\n\n<li>https:\/\/fxdocs.github.io\/docs\/html5\/#_introduction<\/li>\n\n\n\n<li>https:\/\/sintaxispragmatica.files.wordpress.com\/2014\/04\/tutorial-javafx-primeros-pasos.pdf<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Algunos Recursos JavaFX permite crear aplicaciones Java con una interfaz de usuario moderna, acelerada por hardware y altamente portable. Existe una&nbsp;documentaci\u00f3n&nbsp;de referencia detallada para JavaFX. Para obtener informaci\u00f3n sobre c\u00f3mo ejecutar aplicaciones JavaFX en plataformas m\u00f3viles, consulte&nbsp;Introducci\u00f3n a Gluon Mobile. Para obtener informaci\u00f3n sobre el soporte a largo plazo (LTS) para JavaFX 11, consulte las [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6],"tags":[28],"class_list":["post-1627","post","type-post","status-publish","format-standard","hentry","category-java","tag-javafx"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/posts\/1627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/comments?post=1627"}],"version-history":[{"count":3,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/posts\/1627\/revisions"}],"predecessor-version":[{"id":1640,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/posts\/1627\/revisions\/1640"}],"wp:attachment":[{"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/media?parent=1627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/categories?post=1627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iscodigo.com\/blog\/wp-json\/wp\/v2\/tags?post=1627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}