保存并设置“未最大化”的窗口大小?

保存并设置“未最大化”的窗口大小?

问题描述:

当用户关闭程序时,我想保存一些关于主窗口的信息,所以下次用户打开程序时,窗口具有相同的属性。保存并设置“未最大化”的窗口大小?

这容易使窗口是否最大化的事情:

  • 得到: stage.isMaximized()
  • 套装: stage.setMaximized(布尔最大化);

这也是很容易做到,如果没有最大化窗口:

  • 得到: stage.getX()/ stage.getY()/ stage.getWidth()/ stage.getHeight ();
  • 设置: stage.setX()/ stage.setY()/ stage.setWidth()/ stage.setHeight();

但是,如果窗口最大化,这些获取函数会给我们最大化窗口的尺寸和位置。如果我设置这些值并且用户将窗口恢复到非最大化状态,则窗口将保持与其最大化尺寸相似,而不是像用户所期望的那样缩小。

如何保存正在关闭的当前最大化窗口的“窗口化”阶段尺寸和位置,然后在程序重新打开时恢复此信息

+0

如果窗口最大化不救的尺寸(您可以在维度保存到0 ,0并且从不使用它们。),只需在加载时保存isMaximized = true并将setMaximized设置为true即可。如果未将最大化集最大化为假并保存尺寸。加载时使用preferredSize()或perferredHeight和preferredWidth()。 – Sedrick

+0

这没有帮助。当窗口最大化时,如果窗口未被最大化,我们需要获得窗口{X,Y,W,H}。 – JoshuaD

你可以使用这个应用程序来解决你的问题。

首先,创建一个名为properties.txt的文本文件。其次,为这个文本文件添加一些默认值。现在,在舞台关闭时使用setOnCloseRequest保存Stage的属性。接下来,如果您有一个关闭舞台的Button,请在使用ButtononAction处理程序按下按钮时保存Stage的属性。不要忘记在应用程序启动时始终加载这些设置。

的properties.txt:

sceneHeight=300.0 
sceneWidth=450.0 
fullScreen=false 

主营:

import java.io.*; 
import java.util.*; 
import java.util.logging.*; 
import javafx.application.*; 
import javafx.event.*; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.*; 

/** 
* 
* @author Sedrick 
*/ 
public class JavaFXApplication56 extends Application { 

    @Override 
    public void start(Stage primaryStage) 
    { 
     Map<String, String> properties = loadProperties(); 

     Button btn = new Button(); 
     btn.setText("Toggle fullScreen"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) 
      { 
       if (properties.get("fullScreen").endsWith("true")) { 
        properties.put("fullScreen", "false"); 
        primaryStage.setFullScreen(false); 
       } 
       else { 
        properties.put("fullScreen", "true"); 
        primaryStage.setFullScreen(true); 
       } 
      } 
     }); 

     Button btnExit = new Button(); 
     btnExit.setText("Exit"); 
     btnExit.setOnAction((event) -> { 
      properties.put("fullScreen", Boolean.toString(primaryStage.isFullScreen())); 
      if (!primaryStage.isFullScreen()) { 
       properties.put("sceneHeight", Double.toString(primaryStage.getHeight())); 
       properties.put("sceneWidth", Double.toString(primaryStage.getWidth())); 
      } 

      System.out.println("Closing properties:"); 
      properties.forEach((key, value) 
        -> System.out.println("\t" + key + ":" + value)); 
      System.out.println(); 
      saveProperties(properties); 
      primaryStage.close(); 
     }); 

     HBox hBox = new HBox(); 
     hBox.getChildren().addAll(btn, btnExit); 

     BorderPane root = new BorderPane(); 
     root.setBottom(hBox); 

     if (properties.get("fullScreen").equals("true")) { 
      primaryStage.setFullScreen(true); 
     } 
     else { 
      primaryStage.setFullScreen(false); 
     } 

     double sceneWidth = Double.parseDouble(properties.get("sceneWidth")); 
     double sceneHeight = Double.parseDouble(properties.get("sceneHeight")); 
     Scene scene = new Scene(root, sceneWidth, sceneHeight); 

     primaryStage.setOnCloseRequest((event) -> { 
      properties.put("fullScreen", Boolean.toString(primaryStage.isFullScreen())); 
      if (!primaryStage.isFullScreen()) { 
       properties.put("sceneHeight", Double.toString(primaryStage.getHeight())); 
       properties.put("sceneWidth", Double.toString(primaryStage.getWidth())); 
      } 

      System.out.println("Closing properties:"); 
      properties.forEach((key, value) 
        -> System.out.println("\t" + key + ":" + value)); 
      System.out.println(); 
      saveProperties(properties); 
     }); 
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     launch(args); 
    } 

    public Map loadProperties() 
    { 

     File file = new File("properties.txt"); 
     Map<String, String> properties = new HashMap(); 
     try { 
      Scanner input = new Scanner(file); 
      while (input.hasNext()) { 
       String[] parts = input.nextLine().split("="); 
       properties.put(parts[0], parts[1]); 
      } 
     } 
     catch (FileNotFoundException ex) { 
      System.out.println(ex.toString()); 
     } 

     System.out.println("Loading properties:"); 
     properties.forEach((key, value) 
       -> System.out.println("\t" + key + ":" + value)); 
     System.out.println(); 
     return properties; 
    } 

    public void saveProperties(Map<String, String> properties) 
    { 
     StringBuilder stringBuilder = new StringBuilder(); 

     for (String key : properties.keySet()) { 
      stringBuilder.append(key).append("=").append(properties.get(key)).append("\n"); 
     } 

     try (BufferedWriter bw = new BufferedWriter(new FileWriter("properties.txt"))) { 
      bw.write(stringBuilder.toString()); 
     } 
     catch (IOException ex) { 
      Logger.getLogger(JavaFXApplication56.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
}