tutorial instalar español botones java javafx fxml scenebuilder

instalar - javafx tutorial netbeans



¿Cómo crear un archivo FXML para un nuevo componente ya creado en Java que agregarlo al generador de escenas? (1)

Soy nuevo en javaFX. Creé un cuadro de búsqueda personalizado (extiende TextField) en Java, verifique la imagen:

Lo probé con una clase de prueba y está funcionando.

Quiero saber ahora si es posible crear su archivo FXML que agregar este componente al generador de escenas. cómo hacerlo ? Gracias por adelantado.


Cómo importar un componente desde un JAR a SceneBuilder

Puede poner su componente en un Jar e importarlo en SceneBuilder. No necesita crear un archivo FXML para su componente para agregarlo al Panel de biblioteca de SceneBuilder.

Consulte la sección Agregar componentes personalizados a la biblioteca de la guía del usuario de JavaFX.

Para importar componentes de GUI personalizados desde un archivo JAR o FXML:

  1. Seleccione el comando Importar archivo JAR / FXML del menú del panel Biblioteca, o arrastre el archivo JAR o FXML directamente desde el administrador de archivos nativo de su sistema (Explorer o Finder) y suéltelo en el panel Biblioteca

  2. En la ventana de diálogo Abrir, navegue hasta la ubicación del archivo JAR o FXML que desea importar. Se muestra el cuadro de diálogo Importar, similar a lo que se muestra en la Figura 8-4 . El contenido del archivo JAR se inspecciona y todas las clases de Java que se determinan como componentes personalizados adecuados se muestran en la ventana de diálogo. El contenido del archivo FXML se analiza para asegurarse de que el componente que se agrega sea válido y autónomo.

  3. Desde la ventana de diálogo Importar, seleccione o anule la selección de elementos de la lista de elementos que puede importar.

  4. Haz clic en Importar componentes. Los elementos importados se agregan a la sección Personalizada del panel Biblioteca. Se pueden usar de inmediato y persisten en la Biblioteca incluso después de reiniciar Scene Builder

Tenga en cuenta que SceneBuilder también admite la importación de componentes basados ​​en FXML en lugar de solo componentes de código directo. Esta respuesta solo analiza la importación de componentes de código solamente que no contienen FXML.

Ejemplo de uso de componentes importados

Aquí hay un componente de campo de búsqueda personalizado que importé a SceneBuilder usando el método descrito anteriormente.

El panel de búsqueda superior está en el panel de diseño de Scene Builder, el panel de búsqueda inferior es el resultado de usar la función de vista previa de Scene Builder y buscar la felicidad.

Código generado de SceneBuilder de muestra

Aquí se incluye el archivo fxml que fue generado por SceneBuilder basado en el diseño. Tenga en cuenta que esta fue solo una escena de prueba que creé con SceneBuilder para probar el componente ya importado; no era parte del proceso de importación del componente en sí.

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import org.jewelsea.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label text="Search Field Import Test"> <font> <Font size="16.0" /> </font> </Label> <SearchField /> </children> <padding> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </padding> </VBox>

Código de componente de muestra (importable)

El código para el cuadro de búsqueda que se importó es:

package org.jewelsea; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; public class SearchField extends StackPane { private final TextField textField; private final Button searchButton; private final Label searchResults; public SearchField() { textField = new TextField(); textField.setPromptText( "Search Text" ); searchButton = new Button("Search"); searchResults = new Label(); VBox layout = new VBox( 20, new HBox( 10, textField, searchButton ), searchResults ); layout.setPadding(new Insets(10)); searchButton.setOnAction(event -> searchResults.setText( "Search result for " + textField.getText() ) ); getChildren().setAll( layout ); } }

Prerrequisitos de componentes

Para que el proceso funcione, hay algunas cosas que debe asegurarse:

  1. Su clase de componente extiende Nodo.
  2. Su clase de componente no tiene un constructor de argumentos.
  3. Su clase de componente y ningún constructor de argumentos son públicos.
  4. Su clase de componente está en un paquete (por ejemplo, org.jewelsea), no puede tener ningún paquete establecido.
  5. Su clase de componente está empaquetada en un archivo JAR que se ha importado a SceneBuilder como se describió anteriormente.

Solución de problemas

Si tiene problemas para importar el JAR, después de haber intentado una importación JAR, puede usar la función de análisis JAR documentada a continuación para ayudar a solucionar problemas (lo que podría ayudar o podría proporcionar información críptica para confundirlo más).