Export HTML option
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / RememberJFrame.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 \r
3 import java.awt.Rectangle;\r
4 import java.awt.event.ComponentEvent;\r
5 import java.awt.event.ComponentListener;\r
6 import java.util.prefs.Preferences;\r
7 \r
8 import javax.swing.JFrame;\r
9 \r
10 public class RememberJFrame extends JFrame {\r
11         private static final long serialVersionUID = 1L;\r
12 \r
13 \r
14         public RememberJFrame(int width, int height){\r
15                 setSize(width, height);\r
16                 restore();\r
17                 addComponentListener(new ComponentListener() {\r
18                         @Override\r
19                         public void componentResized(ComponentEvent arg0) {\r
20                                 positionChanged();\r
21                         }\r
22                         @Override\r
23                         public void componentMoved(ComponentEvent arg0) {\r
24                                 positionChanged();\r
25                         }\r
26                         @Override\r
27                         public void componentHidden(ComponentEvent arg0) {}\r
28                         @Override\r
29                         public void componentShown(ComponentEvent arg0) {}\r
30                 });\r
31         }\r
32         \r
33         protected String getPositionKey(){\r
34                 return this.getClass().getName();\r
35         }\r
36         \r
37         private void positionChanged(){\r
38                 Rectangle r = getBounds();\r
39                 Preferences prefs = Preferences.userNodeForPackage(this.getClass());\r
40                 boolean max = (getExtendedState() & JFrame.MAXIMIZED_BOTH)!=0;\r
41                 if ( !max ){\r
42                         prefs.putInt(getPositionKey() + ".w", r.width);\r
43                         prefs.putInt(getPositionKey() + ".h", r.height);\r
44                         prefs.putInt(getPositionKey() + ".x", r.x);\r
45                         prefs.putInt(getPositionKey() + ".y", r.y);\r
46                 }\r
47                 prefs.putInt("m", max?1:0);\r
48         }\r
49         \r
50         private void restore(){\r
51                 Preferences prefs = Preferences.userNodeForPackage(this.getClass());\r
52                 Rectangle r = new Rectangle(\r
53                                         prefs.getInt(getPositionKey() + ".x", 0),\r
54                                         prefs.getInt(getPositionKey() + ".y", 0),\r
55                                         prefs.getInt(getPositionKey() + ".w", getSize().width),\r
56                                         prefs.getInt(getPositionKey() + ".h", getSize().height)\r
57                                         );\r
58                 this.setSize(r.width, r.height);\r
59                 setLocation(r.x, r.y);\r
60                 \r
61                 if ( prefs.getInt("m", 0) == 1 )\r
62                         setExtendedState( getExtendedState()|JFrame.MAXIMIZED_BOTH );\r
63         }\r
64 \r
65         \r
66         @SuppressWarnings("deprecation")\r
67         public static void main(String[] args){\r
68                 RememberJFrame f = new RememberJFrame(300, 300);\r
69                 f.setDefaultCloseOperation(EXIT_ON_CLOSE);\r
70                 f.show();\r
71         }\r
72 }\r