2016-11-17 2 views
0

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

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

Это текущий пример, используя метод private в пределах класса:

private ServiceEvent_NewController loadServiceEvent_Stage(Stage primaryStage) 
{ 
    ServiceEvent_NewController controller = null; 

    try 
    { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/View/ServiceEvent_New.fxml")); 
     Parent root = loader.load(); 

     // Create the dialog Stage. 
     Stage dialogStage = new Stage(); 
     dialogStage.initModality(Modality.WINDOW_MODAL); 
     dialogStage.initOwner(primaryStage); 
     Scene scene = new Scene(root); 
     dialogStage.setScene(scene); 

     controller = loader.getController(); 
     controller.setDialogStage(dialogStage);    

    } 
    catch (IOException npe) 
    { 
     String message = npe.getMessage(); 
     System.out.println(message); 
    }     

    return controller; 
} 

У меня есть класс полезности (public final class LM_Utility).
Если я пытаюсь создать метод для загрузки FXML здесь с помощью:

public static ServiceEvent_NewController loadServiceEvent_Stage(Stage primaryStage) 

компилятор жалуется "non-static method getClass() cannot be referenced from a static context".

Есть ли способ создать подходящий метод утилиты для загрузки таких файлов, чтобы я мог «писать раз и использовать много раз»?

+0

Вы попробовали ServiceEvent_NewController.class.getResource ("...")? –

ответ

0

getClass() возвращает класс выполнения, содержащий метод.

Если вам не нужны эффекты, используя расположение относительно простирающихся классов, вы могли бы просто заменить

getClass() 

с

LM_Utility.class 

который является выражением для Class объекта для LM_Utility класса , то есть то, что getClass() вернется в нестационарном методе, поскольку LM_Utility - final.

Конечно, вы, вероятно, должны передать путь ресурса файла fxml к методу, а также использовать интерфейс или абстрактный класс, содержащий setDialogStage, а не hardcoding тип объекта. Вы можете использовать параметр типа <T extends ControllerInterface>, чтобы вы могли использовать реальный тип контроллера в качестве цели для назначения. (Обратите внимание, что во время выполнения это назначение будет по-прежнему эффективно содержать приведение к целевому типу.)

+0

Спасибо, Фабиан. – gbear

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