2014-05-07 4 views
0

Хорошо, ребята, я загрузил IssueTrackerLite исходный код из oracle и ввел fxml в Scene Builder 2.0. Я добавил MenuButton с fx:id cssTheme, и я хочу, чтобы это было, когда программа проверяет каталог и загружает все файлы css в этот каталог в список, а затем, когда вы его выбираете, он обновит тему/css стиль на лету.JavaFX Scene Builder 2.0 динамический css menubutton

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

IssueTrackerLite: Download Here

+1

вы просто использовать 'scene.getStylesheets() удалить (0).. И' scene.getStylesheets() добавить (0, "URL"); '. Измените 0 на все, что вам нужно. Сцена сразу обновляется. – brian

+0

Это насколько я понял, я просто не уверен, как сделать мою кнопку меню заполненной всеми стилями в каталоге, а затем обновить, на основе которой вы выбрали. – claytoncasey01

+0

Итак, вы хотите, чтобы в меню был список файлов * .css? Вы не можете просто использовать выбор файла? – brian

ответ

0

Я положил это в заявке начать

File userPath = new File(System.getProperty("user.dir")); 
    for (String s : userPath.list()) 
     if (s.endsWith(".css")){ 
      MenuItem mi = new MenuItem(s); 
      //using already made menu in my prog 
      controller.mnuEdit.getItems().add(mi); 
      mi.setOnAction((e)->{ 
       //always adding and removing from position 1 
       //I already have a style sheet set at 0 
       scene.getStylesheets().remove(1); 
       try { 
        scene.getStylesheets().add(1,new File(
          System.getProperty("user.dir")+ 
          System.getProperty("file.separator")+s) 
          .toURI().toURL().toExternalForm()); 
       } catch (MalformedURLException ex) { 
       } 
      }); 
     } 

Только в случае, если вы не реф контроллеру, я загрузить мой FXML как это.

try { 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setResources(ResourceBundle.getBundle("myprog/language/Base", Locale.getDefault())); 
     rootScene = fxmlLoader.load(this.getClass().getResource("Base.fxml").openStream()); 
     controller = (BaseController) fxmlLoader.getController(); 
    } catch (IOException ex) {log.severe(ex.getMessage());}