Как использовать пользовательский компонент в другом пользовательском компоненте в Scene Builder - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь использовать пользовательский компонент в другом пользовательском компоненте, но он не отображается в Scene Builder.

Пример:

У меня есть проект, который:

project folder

Main. java:

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;


public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception 
    {

    }

    public static void main(String[] args) {
        launch(args);
    }
}

Component1. java:

package component1;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.layout.Pane;

public class Component1 extends Pane implements Initializable 
{
    public Component1() 
    {
        super();

        try 
        {
             FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Component1.fxml"));
             fxmlLoader.setRoot(this);
             fxmlLoader.setController(this);
             fxmlLoader.load(); 
        }
        catch (Exception e) 
        {

        }
}

    @Override
    public void initialize(URL location, ResourceBundle resources) 
    {


    }

}

Component1.f xml:

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

<?import component2.Component2?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.shape.Line?>


<fx:root prefHeight="200.0" prefWidth="200.0" type="Pane" xmlns="http://javafx.com/javafx/8.0.171" 
xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Line endX="38.0" endY="66.70709228515625" layoutX="100.0" layoutY="59.0" startX="-47.0" 
startY="-17.70709228515625" />
      <Line endX="36.29289245605469" endY="-35.0" layoutX="115.0" layoutY="77.0" startX="-69.5" 
startY="48.0" />
      <Component2 layoutX="33.0" layoutY="84.0" />
   </children>
</fx:root>

Component1.f xml в представлении Scene Builder:

Component1.fxml view

Component2. java :

package component2;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.layout.Pane;

public class Component2 extends Pane implements Initializable 
{
    public Component2() 
    {
        super();

        try 
        {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Component2.fxml"));
            fxmlLoader.setRoot(this);
            fxmlLoader.setController(this);
            fxmlLoader.load(); 
        }
        catch (Exception e) 
        {

        }
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO Auto-generated method stub

    }

}

Component2.f xml:

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

<?import javafx.scene.layout.Pane?>
<?import javafx.scene.shape.Circle?>


<fx:root prefHeight="141.0" prefWidth="106.0" type="Pane" xmlns="http://javafx.com/javafx/8.0.171" 
xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Circle fill="DODGERBLUE" layoutX="35.0" layoutY="46.0" radius="20.0" stroke="BLACK" 
strokeType="INSIDE" />
      <Circle fill="DODGERBLUE" layoutX="75.0" layoutY="46.0" radius="20.0" stroke="BLACK" 
strokeType="INSIDE" />
      <Circle fill="DODGERBLUE" layoutX="55.0" layoutY="81.0" radius="20.0" stroke="BLACK" 
strokeType="INSIDE" />
   </children>
</fx:root>

Component2.f xml в представлении Scene Builder:

Component2.fxml view

Когда я пытаюсь добавить эти два компонента в конструктор сцен, я не вижу и не использую Component1 из-за использования Component2 в Component1.

При попытке добавить Test_Project02.jar в Scene Строитель, я вижу:

for Component1 for Component2

Я использую этот глупый пример для упрощения проблемы, извините. Так что я могу сделать для использования одного компонента в другом?

...