2016-04-26 11 views
0

Mac OSX El Capitanで動作するjavaFxアプリケーションを作成しています。 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); 
     ... 
関連する問題