Como criar um arquivo FXML para um novo componente já criado em java do que adicioná-lo ao construtor de cena?

Eu sou novo no javaFX. Eu criei uma checkbox de pesquisa personalizada (estende TextField) em java, verifique a imagem:

insira a descrição da imagem aqui

Eu testei com uma class de teste e está funcionando.

Eu quero saber agora se é possível criar seu arquivo FXML do que adicionar este componente ao construtor de cenas? como fazer isso ? Desde já, obrigado.

    Como importar um componente de um JAR para o SceneBuilder

    Você pode colocar seu componente em um Jar e importá-lo para o SceneBuilder. Você não precisa criar um arquivo FXML para o seu componente para adicioná-lo ao SceneBuilder Library Panel.

    Consulte a seção Adicionando componentes personalizados à biblioteca do guia do usuário do JavaFX.

    Para importar componentes personalizados da GUI de um arquivo JAR ou FXML:

    1. Selecione o comando Importar arquivo JAR / FXML no menu do painel Biblioteca ou arraste o arquivo JAR ou FXML diretamente do gerenciador de arquivos nativo do sistema (Explorer ou Finder) e solte-o no painel Biblioteca

    2. Na janela Abrir, navegue até o local do arquivo JAR ou FXML que você deseja importar. O Diálogo de Importação, semelhante ao mostrado na Figura 8-4 , é exibido. O conteúdo do arquivo JAR é inspecionado e todas as classs Java que são determinadas como componentes customizados adequados são exibidas na janela de diálogo. O conteúdo do arquivo FXML é analisado para garantir que o componente que está sendo adicionado seja válido e autocontido.

    3. Na janela de diálogo Importar, selecione ou desmarque os itens da lista de itens que você pode importar.

    4. Clique em Import Components. Itens importados são adicionados à seção Personalizar do painel Biblioteca. Eles podem ser usados ​​imediatamente e eles persistem na Biblioteca mesmo depois que o Criador de Cena for reiniciado

    Note que o SceneBuilder também suporta a importação de componentes baseados em FXML ao invés de apenas componentes de código direto. Essa resposta apenas discute a importação de componentes somente de código que não contêm FXML.

    Exemplo de uso de componente importado

    Aqui está um componente de campo de pesquisa personalizado que importei para o SceneBuilder usando o método descrito acima.

    amostra de pesquisa

    O painel de pesquisa superior está no painel de design do Scene Builder, o painel de pesquisa inferior é o resultado do uso da function de visualização do Scene Builder e da busca por felicidade.

    Exemplo de código gerado pelo SceneBuilder

    O arquivo fxml que foi gerado pelo SceneBuilder com base no design está incluído aqui. Note que esta foi apenas uma cena de teste que criei com o SceneBuilder para testar o componente já importado – não fazia parte do próprio processo de importação do componente.

    < ?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.*?>          

    Exemplo de código de componente (importável)

    O código da checkbox de pesquisa que foi importada é:

     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 ); } } 

    Pré-requisitos de componentes

    Para que o processo funcione, há algumas coisas que você precisa garantir:

    1. Sua class de componente estende o nó.
    2. Sua class de componente não possui um construtor de argumento.
    3. Sua class de componentes e nenhum construtor de argumentos são públicos.
    4. Sua class de componentes está em um pacote (por exemplo, org.jewelsea) – não pode ter nenhum pacote definido.
    5. Sua class de componente é empacotada em um arquivo JAR que foi importado para o SceneBuilder conforme descrito acima.

    Solução de problemas

    Se você está tendo problemas ao importar o JAR, depois de tentar uma importação de JAR, é possível usar a function de análise JAR documentada abaixo para ajudar na solução de problemas (o que pode ajudar ou apenas fornecer algumas informações secretas para confundir mais).

    análise de arquivo jar