Путь префикса для файлов FXML в TornadoFX - PullRequest
0 голосов
/ 06 января 2019

Есть ли способ указать путь для файлов FXML, используемых TornadoFX , с использованием его соглашения by fxml()?

Обычно TornadoFX обычно пытается найти ресурсы FXML в src/main/resources, однако наше приложение велико, и сейчас это может быть лучшей идеей. В нашем случае мы хотели бы сохранить файлы в подкаталоге, т.е. src/main/resources/fxml.

Мы хотели бы настроить его при запуске приложения. Это возможно?

1 Ответ

0 голосов
/ 06 января 2019

Я добавил функцию локатора FXML в платформу, чтобы вы могли переопределить ее, чтобы изменить местоположение ресурса. Объявление и реализация по умолчанию выглядит следующим образом:

var fxmlLocator: (component: UIComponent, location: String?) -> URL = { component, location ->
    val targetLocation = location ?: component.javaClass.simpleName + ".fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}

Вы можете переопределить это в app.init(), например, так:

FX.fxmlLocator = { component, _ ->
    val targetLocation = "/fxml/${component.javaClass.simpleName}.fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}

Однако, если вы пойдете этим путем, вы должны обратить внимание на имена ваших классов, так как одно и то же имя класса в разных пакетах будет искать один и тот же ресурс в / fxml. В качестве альтернативы измените реализацию, чтобы также соблюдать имена пакетов.

Сейчас я использую эту функцию, вы можете попробовать ее завтра, используя последний выпуск снимка от sonatype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...