(no commit message)
authorBill Kuker <bkuker@billkuker.com>
Wed, 24 Nov 2010 14:23:34 +0000 (14:23 +0000)
committerBill Kuker <bkuker@billkuker.com>
Wed, 24 Nov 2010 14:23:34 +0000 (14:23 +0000)
gui/com/billkuker/rocketry/motorsim/visual/RemeberJFrame.java [new file with mode: 0644]

diff --git a/gui/com/billkuker/rocketry/motorsim/visual/RemeberJFrame.java b/gui/com/billkuker/rocketry/motorsim/visual/RemeberJFrame.java
new file mode 100644 (file)
index 0000000..e75622b
--- /dev/null
@@ -0,0 +1,67 @@
+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