-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPropertiesTest.java
92 lines (80 loc) · 3.22 KB
/
PropertiesTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package properties;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.util.Properties;
/**
* A program to test properties. The program remembers the frame position,
* size, and title.
*
* @author Cay Horstmann
* @version 1.01 2015-06-16
*/
public class PropertiesTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
PropertiesFrame frame = new PropertiesFrame();
frame.setVisible(true);
});
}
}
/**
* A frame that restores position and size from a properties file and updates
* the properties upon exit.
*/
class PropertiesFrame extends JFrame {
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
private File propertiesFile;
private Properties settings;
public PropertiesFrame() {
// get position, size, title from properties
String userDir = System.getProperty("user.home");
// File propertiesDir = new File(".corejava"); /* 项目目录为根 目录 */
File propertiesDir = new File("chapter13/.corejava"); /* "chapter13"作为module时 */
if (!propertiesDir.exists()) propertiesDir.mkdir();
propertiesFile = new File(propertiesDir, "program.properties");
Properties defaultSettings = new Properties();
defaultSettings.setProperty("left", "0");
defaultSettings.setProperty("top", "0");
defaultSettings.setProperty("width", "" + DEFAULT_WIDTH);
defaultSettings.setProperty("height", "" + DEFAULT_HEIGHT);
defaultSettings.setProperty("title", "");
settings = new Properties(defaultSettings);
if (propertiesFile.exists()) {
try (InputStream in = new FileInputStream(propertiesFile)) {
settings.load(in);
} catch (IOException e) {
e.printStackTrace();
}
}
int left = Integer.parseInt(settings.getProperty("left"));
int top = Integer.parseInt(settings.getProperty("top"));
int width = Integer.parseInt(settings.getProperty("width"));
int height = Integer.parseInt(settings.getProperty("height"));
setBounds(left, top, width, height);
// if no title given, ask user
String title = settings.getProperty("title");
if (title.equals(""))
title = JOptionPane.showInputDialog("Please supply a frame title:");
if (title == null) title = "";
setTitle(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
settings.setProperty("left", "" + getX());
settings.setProperty("top", "" + getY());
settings.setProperty("width", "" + getWidth());
settings.setProperty("height", "" + getHeight());
settings.setProperty("title", getTitle());
try (OutputStream out = new FileOutputStream(propertiesFile)) {
settings.store(out, "Program Properties");
} catch (IOException ex) {
ex.printStackTrace();
}
System.exit(0);
}
});
}
}