2016-03-29 4 views
0

Кто-нибудь знает, как сохранить сцену JavaFX в файле FXML, который может быть загружен с помощью JavaFX FXMLLoader?Сохранить сцену JavaFX в файл FXML

SceneBuilder позволяет это сделать, но если я создам сцену вручную, как я могу сохранить ее в файл FXML?

ответ

0

.fxml только расширение файла, вы можете создать его с помощью любого текстового файла редактора, я рекомендую вам использовать SceneBuilder в любом случае, так как вы можете создать свой пользовательский интерфейс и CTRL + C на корневой компонент, CTRL + V, чтобы notepad ++ или другой редактор, и получить источник прямо оттуда, отредактировать по своему вкусу.

Чтобы сделать это коротко, FXML представляет собой формат объявления на основе XML для JavaFX. JavaFX предоставляет загрузчик FXML, который будет анализировать файлы FXML и из этого построить график объекта Java. Это может показаться сложным, если говорить так, но на самом деле это довольно просто. Вот пример FXML файла, который экземпляр StackPane и помещает кнопку внутри него:

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

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

<StackPane prefHeight="150.0" prefWidth="200.0" xmlns:fx="http://javafx.com/fxml"> 
    <children> 
    <Button mnemonicParsing="false" text="Button" /> 
    </children> 
</StackPane> 

Вы хотите задать контроллер, а также с fx:controller="" Или установить контроллер в вашем коде, независимо соответствует вашим потребностям.

если ваш вопрос более к тому, что писал pdem, я предлагаю вам взглянуть на scenic View, вы можете получить много Infomation от запущенного приложения и воссоздать его на основе из it.If, что AINT достаточно, есть не так много вы можете сделать.

0

Если вы имеете в виду сборку файла fxml на рабочем экране, построенном на Java, то короткий ответ заключается в том, что вы не можете.

FxmlLoader предназначен для работы только для загрузки файлов, он ссылается на класс XMLInputFactory, но не на XMLOutputFactory.

Если вы хотите сделать это самостоятельно, это не только переписать классы, прочитанные FXMLLoader, потому что в этом классе много отражения (java.lang.reflect).

Таким образом, долгий ответ может быть таким: вы можете сделать это самостоятельно, используя много отражений и написание динамических тегов из имен классов, но не будет никакой гарантии, что ваш fxml даст ожидаемые результаты.

0

Нет такой библиотеки, AFAIK, и я не уверен, что можно создать общий. Это может быть возможно для простых случаев, но даже тогда это большая работа, я думаю.

Вот формат FXML объяснил, если вы хотите, чтобы дать ему попробовать: http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html

Вы можете траверс вашего графа сцены/узел и генерировать файл FXML.

Но зачем нужен формат FXML? Возможно, было бы проще просто переписать макет в FXML вместо того, чтобы писать такую ​​библиотеку.

Если вам удастся написать такую ​​библиотеку - сообщите нам об этом! :-)

Смежные вопросы