0
Mac OSX El Capitanで動作するjavaFxアプリケーションを作成しています。 jarファイルから.appファイルにバンドルを作成すると、アプリケーションウィンドウのディメンションが変更されます。JavaFxアプリケーションバンドル後のEl Capitanのウィンドウの寸法の変更
バンドリングの前後でウィンドウの寸法を同じにしたい。どんな助けもありがとうございます。
Mac OSX El Capitanで動作するjavaFxアプリケーションを作成しています。 jarファイルから.appファイルにバンドルを作成すると、アプリケーションウィンドウのディメンションが変更されます。JavaFxアプリケーションバンドル後のEl Capitanのウィンドウの寸法の変更
バンドリングの前後でウィンドウの寸法を同じにしたい。どんな助けもありがとうございます。
私が知っている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);
...