Consulta JavaFx

Iniciado por nolasco281, 23 Abril 2015, 14:18 PM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola a todos.

Tengo la siguiente consulta es estado tratando de programar en javaFx pero la verdad se me hace un poco confuso.

Ya que he visto métodos en los que programan cada control con código hasta los paneles etc.

Luego encontré que lo hacen con javafx scene builder y asi evitar crear los controles a mano pero hay que hacerlo bajo un archivo fxml, y me ha dado muchos errores de compilación.

Y luego encontré que netbeans trabajaba con una herramienta llamada JavafX Composer parecida a la swing pero el problema que esta herramienta solo trabaja con Fx 1.xx obsoleto.
Mi consulta es si saben de alguna herramienta que sea parecida a swing sin tanta complicación.

Si la hayo comento gracias y tal vez puedan ayudarme saludos.
Lo que se puede imaginar... se puede programar.

Usuario Invitado

#1
Hola,

Cuando JavaFX nació (no JavaFX script), se creaban las GUI's con código Java, como en el caso de Swing. Luego, con versiones posteriores de JavaFX, se creó un lenguaje basado en XML que se llama FXML. Ésta forma de crear GUI's es mucho más práctica y eficiente desde el punto de vista de delegación de actividades y la fácil implementación del patrón MVC.

Cuando creas una aplicación JavaFX con FXML, tienes en primera instancia 2 capas: Vista y Controlador. Por ejemplo:

Código (xml) [Seleccionar]

<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">


Fíjate en el atributo fx:controller. Aquí, debes de indicar la ruta del controlador de dicha vista. En el caso, anterior:

Código (java) [Seleccionar]

package net.elhacker.javafxdemo.controllers;

public class HelloWorldController { /* ... */ }


Ahora, la forma de referenciar los controles FXML en el controlador, se hace a base de identificadores y anotaciones. Por ejemplo, en el FXML tienes un botón:

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
  <children>
     <Button fx:id="btnHello" mnemonicParsing="false" text="Click me!" />
  </children>
</StackPane>


Fíjate en el atributo fx:id, su valor identifica al elemento. Por ello, podemos referenciarlo en nuestro controlador muy fácilmente:

Código (java) [Seleccionar]

public class HelloWorldController {
@FXML private Button btnHello;
}


Para asignarle un método cuando se produzca un evento en el botón, solo debemos especificar el atributo onAction="#nombremétodo":

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
  <children>
     <Button mnemonicParsing="false" text="Click me!" onAction="#btnHelloAction" />
  </children>
</StackPane>


Y en nuestro controlador:

Código (java) [Seleccionar]

public class HelloWorldController {
@FXML private Button btnHello;

@FXML public void btnHelloAction(ActionEvent e) {
// hacer algo
}
}



Usar FXML es la mejor forma de trabajar con JavaFX. Además, es la forma recomendada por Oracle.


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

nolasco281

Creo que voy entendio muchas gracias.

Si me erredo con algo pregunto.

Saludos.
Lo que se puede imaginar... se puede programar.

HunterLuis

Hola gus una pregunta tenes algun canal en youtube que estes impartiendo para poder comprender mejor todo lo relacionado con java fx porfa si tenes algun canal mandanos el link para poderlo ver. gracias