--- /dev/null
+package com.billkuker.rocketry.motorsim.visual;\r
+\r
+import java.awt.Rectangle;\r
+import java.awt.event.ComponentEvent;\r
+import java.awt.event.ComponentListener;\r
+import java.util.prefs.Preferences;\r
+\r
+import javax.swing.JFrame;\r
+\r
+public class RemeberJFrame extends JFrame {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+\r
+ public RemeberJFrame(int width, int height){\r
+ setSize(width, height);\r
+ restore();\r
+ addComponentListener(new ComponentListener() {\r
+ @Override\r
+ public void componentResized(ComponentEvent arg0) {\r
+ positionChanged();\r
+ }\r
+ @Override\r
+ public void componentMoved(ComponentEvent arg0) {\r
+ positionChanged();\r
+ }\r
+ @Override\r
+ public void componentHidden(ComponentEvent arg0) {}\r
+ @Override\r
+ public void componentShown(ComponentEvent arg0) {}\r
+ });\r
+ }\r
+ \r
+ private void positionChanged(){\r
+ Rectangle r = getBounds();\r
+ Preferences prefs = Preferences.userNodeForPackage(this.getClass());\r
+ boolean max = (getExtendedState() & JFrame.MAXIMIZED_BOTH)!=0;\r
+ if ( !max ){\r
+ prefs.putInt("w", r.width);\r
+ prefs.putInt("h", r.height);\r
+ prefs.putInt("x", r.x);\r
+ prefs.putInt("y", r.y);\r
+ }\r
+ prefs.putInt("m", max?1:0);\r
+ }\r
+ \r
+ private void restore(){\r
+ Preferences prefs = Preferences.userNodeForPackage(this.getClass());\r
+ Rectangle r = new Rectangle(\r
+ prefs.getInt("x", 0),\r
+ prefs.getInt("y", 0),\r
+ prefs.getInt("w", getSize().width),\r
+ prefs.getInt("h", getSize().height)\r
+ );\r
+ this.setSize(r.width, r.height);\r
+ setLocation(r.x, r.y);\r
+ \r
+ if ( prefs.getInt("m", 0) == 1 )\r
+ setExtendedState( getExtendedState()|JFrame.MAXIMIZED_BOTH );\r
+ }\r
+\r
+ \r
+ public static void main(String[] args){\r
+ RemeberJFrame f = new RemeberJFrame(300, 300);\r
+ f.setDefaultCloseOperation(EXIT_ON_CLOSE);\r
+ f.show();\r
+ }\r
+}\r