2016-04-26 4 views
0

Я создаю приложение javaFx, которое работает в Mac OSX El Capitan. Когда я создаю пакет из моего jar-файла в файл .app, изменяется размер окна приложения.Приложение JavaFx Изменения размера окна в El Capitan после комплектации

Я хочу, чтобы размер окна был таким же, как и после комплектации. Любая помощь приветствуется.

ответ

0

Как я знал, JavaFX автоматически не сохраняет/восстанавливает положение окна/размер окна.

Итак, вы должны восстановить положение окна/размер перед окном просмотра и сохранить его перед закрытием окна. Например, я использую такой помощник:

import javafx.stage.Stage; 

import java.util.prefs.Preferences; 

public class StagePositionManager { 

    public static final String IS_FIRST_RUN_KEY = "isFirstRun"; 
    public static final String X_KEY = "x"; 
    public static final String Y_KEY = "y"; 
    public static final String WIDTH_KEY = "width"; 
    public static final String HEIGHT_KEY = "height"; 

    private final Stage stage; 
    private final Class<?> windowClass; 

    public StagePositionManager(Stage stage, Class<?> windowClass) { 
     this.stage = stage; 
     this.windowClass = windowClass; 

     restoreStagePosition(); 
     stage.setOnHidden(event -> saveStagePosition()); 
    } 

    private void saveStagePosition() { 
     Preferences preferences = Preferences.userNodeForPackage(windowClass); 

     preferences.putBoolean(IS_FIRST_RUN_KEY, false); 

     preferences.putDouble(X_KEY, stage.getX()); 
     preferences.putDouble(Y_KEY, stage.getY()); 
     preferences.putDouble(WIDTH_KEY, stage.getWidth()); 
     preferences.putDouble(HEIGHT_KEY, stage.getHeight()); 
    } 

    private void restoreStagePosition() { 
     Preferences preferences = Preferences.userNodeForPackage(windowClass); 

     if (!preferences.getBoolean(IS_FIRST_RUN_KEY, true)) { 
      stage.setX(preferences.getDouble(X_KEY, 0)); 
      stage.setY(preferences.getDouble(Y_KEY, 0)); 
      stage.setWidth(preferences.getDouble(WIDTH_KEY, 1024)); 
      stage.setHeight(preferences.getDouble(HEIGHT_KEY, 768)); 
     } 
    } 

} 

и назовите его после запуска приложения:

public class MyApplication extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     ... 
     new StagePositionManager(primaryStage, Main.class); 
     ... 
Смежные вопросы