2016-10-11 4 views
1

Я использую JavaFX в приложении Swing с JFXPanel. Я кодировал интерфейс JavaFX вручную, используя css-файлы. Я использую NetBeans 8.1.JavaFX Scene Builder - можно использовать JFXPanel в Swing

Мне интересно, в этом случае я могу использовать JavaFX Scene Builder для создания пользовательского интерфейса? AFAIK, выход представляет собой файл FXML, который представляет компоненты пользовательского интерфейса. Является ли это совместимым с JFXPanel способом использования JavaFX?

Спасибо!

ответ

1

Если вы хотите управлять самим и компонентами Swing, в Scene Builder короткий ответ - «Нет».

С чисто практической точки зрения SceneBuilder не поддерживает компоненты Swing, что вы собираетесь добавить в свой JFXPanel.

Другая проблема связана с нарезкой резьбы. Scene Builder просто генерирует FXML. FXML загружается FXMLLoader через один из его методов load(...). Этот метод обязательно должен выполняться в одном потоке. Если вы смешиваете компоненты Swing и компоненты JavaFX, вы должны должны управлять потоками соответствующим образом, как описано в JFXPanel documentation. Поскольку вы не можете сообщить FXMLLoader, какие части FXML обрабатывать в потоке приложений JavaFX и какие части обрабатывать в потоке Dispatch событий AWT, нет способа загрузить файл FXML, описывающий сочетание Swing и JavaFX компоненты, которые подчиняются правилам нитей обоих наборов инструментов.

Очевидно, вы можете использовать Scene Builder только для управления содержимым JFXPanel; это идентично «регулярному» использованию Scene Builder. Опять же, все Scene Builder - это генерация FXML, а FXML - просто описание того, какие объекты создавать и как они соотносятся друг с другом. Таким образом, вы можете просто сделать

private JFXPanel jfxPanel ; 

// build Swing components, initialize jfxPanel, etc 

// run on FX Application Thread: 
private void initFX() { 

    FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/fxml/file")); 
    Parent root = loader.load(); 
    Scene scene = new Scene(root); 
    jfxPanel.setScene(scene); 
} 
+0

Поскольку приложение написано в Swing, это огромная и непростая задача для перехода на JavaFX. Следовательно, для недавно добавленного пользовательского интерфейса я начал писать в JavaFX, используя JFXPanel. С SceneBuilder можно ли включить только часть пользовательского интерфейса, который является недавно добавленным интерфейсом JavaFX? Если да, то мне не нужно разрабатывать компоненты JavaFX в code & css, что требует много времени. –

+0

ОК, из вашего вопроса я понял, что вы хотите создать/отредактировать «JFXPanel» и другие компоненты Swing в Scene Builder. Если вы хотите использовать Scene Builder для содержимого 'JFXPanel', то, конечно же, вы можете это сделать: он точно такой же, как вы обычно его используете. –