2013-05-18 2 views
2

Я тестирую и открываю JavaFX.FXML, тег скрипта и метод инициализации

В JavaFX FXML documentation about controllers говорится, что если контроллер имеет метод public void initialize(), он вызывается после загрузки графика FXML.

Возможно ли сделать что-то подобное, но из файла FXML в сценарии? Я пробовал что-то подобное, но initialize() вообще не вызывается.

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

<?language javascript?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane xmlns:fx="http://javafx.com/fxml"> 

    <fx:script> 
    importClass(java.lang.System); 

    function initialize() { 
     System.out.println('hello'); 
    } 
    </fx:script> 

    <Button text="Button" /> 

</AnchorPane> 

Пропустить что-то или просто невозможно сделать из файла FXML?

Есть ли какое-то обходное решение, поэтому файл FXML может вставлять некоторые коды, которые будут автоматически выполняться после его загрузки (без использования внешнего файла контроллера Java)?

ответ

3

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

См. Это fxml+JavaScript metronome application для образца.

+0

Довольно просто :-) Я сравнил его с выполнением инициализации в контроллере: встроенный скрипт даже выполняется перед контроллером. –

1

Контроллер должен также реализовать интерфейс javafx.fxml.Initializable. для вызова метода инициализации. Пример кода контроллера показывает это, но описание не очень ясное.

Я не уверен в скриптах FXML.

+1

Кажется, это изменилось. Согласно документации http://docs.oracle.com/javafx/2/api/javafx/fxml/Initializable.html «Этот интерфейс был заменен автоматическим внедрением свойств местоположения и ресурсов в контроллер. FXMLLoader теперь автоматически вызывается любой подходящий аннотированный метод no-arg initialize(), определенный контроллером. Рекомендуется, чтобы подход к инъекции использовался по возможности ». –

+1

Ха, вы узнаете что-то каждый день. Метод инъекции (который имеет различную сигнатуру к методу в Initalizable) кажется еще менее документированным, чем интерфейс. Ресурсы - это поле, которое аннотируется с помощью @FXML. –