fork(2) download
  1. import java.awt.Dimension;
  2. import java.awt.Point;
  3. import java.awt.event.ComponentAdapter;
  4. import java.awt.event.ComponentEvent;
  5. import java.awt.event.WindowAdapter;
  6. import java.awt.event.WindowEvent;
  7. import java.awt.event.WindowStateListener;
  8. import java.io.BufferedReader;
  9. import java.io.BufferedWriter;
  10. import java.io.File;
  11. import java.io.FileReader;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.util.Date;
  15. import java.util.HashMap;
  16. import java.util.Map;
  17.  
  18. import javax.swing.JFrame;
  19.  
  20. public class saveWindowSize extends JFrame {
  21.  
  22. // 座標記録用
  23. Point pt = new Point();
  24. // 最大化の時の巻き戻し用
  25. Point ptbk = new Point();
  26. // 座標を記録した時間
  27. Date ptDate = new Date();
  28. Dimension dim = new Dimension();
  29. Map<String, String> iniMap = new HashMap<String, String>();
  30.  
  31. public static void main(String[] args) {
  32. new saveWindowSize();
  33. }
  34.  
  35. saveWindowSize() {
  36. init();
  37. }
  38.  
  39. public int getIniInt(String key, int defaultValue) {
  40. if (iniMap.containsKey(key)) {
  41. try {
  42. return Integer.parseInt(iniMap.get(key));
  43. } catch(NumberFormatException e) {
  44. // 握りつぶす
  45. }
  46. }
  47. return defaultValue;
  48. }
  49. public void init() {
  50. iniMap = loadIni();
  51. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  52. int x = getIniInt("x", 100);
  53. int y = getIniInt("y", 100);
  54. int w = getIniInt("w", 300);
  55. int h = getIniInt("h", 200);
  56. int e = getIniInt("e", 0);
  57. this.setTitle("タイトル");
  58.  
  59. // ウィンドウ閉じる時にiniファイルを記録する
  60. addWindowListener(new WindowAdapter() {
  61. @Override public void windowClosing(WindowEvent e) {
  62. saveIni();
  63. }
  64. });
  65. addComponentListener(new ComponentAdapter() {
  66. // ウィンドウが動いたら位置を記録する
  67. // JFrame.NORMAL : 通常(デフォルト)
  68. // JFrame.MAXIMIZED_HORIZ : 垂直方向に最大化
  69. // JFrame.MAXIMIZED_VERT : 垂直方向に最大化
  70. // JFrame.MAXIMIZED_BOTH : 全画面表示
  71. // JFrame.ICONIFIED : アイコン化
  72. @Override public void componentMoved(ComponentEvent e) {
  73. // ウィンドウが通常の時だけウィンドウの位置を記録
  74. if(getExtendedState() == JFrame.NORMAL && isShowing()) {
  75. Point tmp = getLocationOnScreen();
  76. ptbk.setLocation(pt);
  77. pt.setLocation(tmp);
  78. ptDate = new Date();
  79. System.out.println("" + pt.x + "," + pt.y);
  80. }
  81. }
  82. // ウィンドウサイズが変化したらサイズを記録
  83. @Override public void componentResized(ComponentEvent e) {
  84. // ウィンドウが通常の時だけサイズを記録
  85. if(getExtendedState()==JFrame.NORMAL) {
  86. dim.setSize(getSize());
  87. }
  88. }
  89. });
  90.  
  91. // ウィンドウが最大化/最小化/通常になると呼び出される
  92. addWindowStateListener(new WindowStateListener() {
  93. @Override
  94. public void windowStateChanged(WindowEvent e) {
  95. // 最大化された場合
  96. if (getExtendedState() == JFrame.MAXIMIZED_BOTH) {
  97. // 最大化した時に、ウィンドウの位置をステータスノーマルのままずらして来ることがあるので
  98. // ウィンドウの位置を記録してから1秒以内に最大化通知が来たら、前の座標記録をキャンセルする
  99. long l = new Date().getTime();
  100. if (l - ptDate.getTime() < 1000) {
  101. System.out.println("最大化座標を記録したかもなのでもとに戻す");
  102. pt.setLocation(ptbk);
  103. }
  104. }
  105. }
  106. });
  107.  
  108. this.setBounds(x, y, w, h);
  109. this.setExtendedState(e);
  110. dim.setSize(w, h);
  111. pt.setLocation(x, y);
  112. ptbk.setLocation(pt);
  113. ptDate = new Date();
  114.  
  115. setVisible(true);
  116. }
  117.  
  118. public Map<String, String> loadIni() {
  119. File f = new File("save.ini");
  120. Map<String, String> map = new HashMap<String, String>();
  121. try {
  122. FileReader fr = new FileReader(f);
  123. String line;
  124. while((line = br.readLine()) != null) {
  125. int i = line.indexOf('=');
  126. if (i < 0) continue;
  127. String key = line.substring(0, i);
  128. String value = line.substring(i+1);
  129.  
  130. map.put(key, value);
  131. }
  132.  
  133. br.close();
  134. fr.close();
  135. } catch(IOException e) {
  136. e.printStackTrace();
  137. }
  138. return map;
  139. }
  140. public void saveIni() {
  141. File f = new File("save.ini");
  142. try {
  143. FileWriter fw = new FileWriter(f);
  144. bw.write("x=" + pt.x);
  145. bw.newLine();
  146. bw.write("y=" + pt.y);
  147. bw.newLine();
  148. bw.write("w=" + dim.width);
  149. bw.newLine();
  150. bw.write("h=" + dim.height);
  151. bw.newLine();
  152. bw.write("e=" + getExtendedState());
  153. bw.newLine();
  154. bw.close();
  155. fw.close();
  156. } catch(IOException e) {
  157. e.printStackTrace();
  158. }
  159. }
  160. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:20: class saveWindowSize is public, should be declared in a file named saveWindowSize.java
public class saveWindowSize extends JFrame {
       ^
1 error
stdout
Standard output is empty