Javaでは、再起動の間に利用できるように、いくつかのデータをローカルに保存する方法を見つける必要があります。ウィンドウの場所/サイズなどの単純なもの。このような情報は通常C:\Users\<username>\AppData
Windowsに保存されていることは知っていますが(%APPDATA%
Windowsエクスプローラーのアドレスバーに入力してアクセスします)、Mac OS Xのどこに保存されているのかわかりません(補足として、まだわかりません)その構造%APPDATA%
の持つWindows上のフォルダ、\Roaming
、\Local
、\LocalLow
、などのサブフォルダ。)
確かに、OSによっては、ウィンドウの場所などの情報をこれらの領域に保存する方法がいくつかあります。おそらく、これらの比較的ユビキタスなタスクを実行するためにすでに構築されたライブラリさえありますか?
Javaでは、再起動の間に利用できるように、いくつかのデータをローカルに保存する方法を見つける必要があります。ウィンドウの場所/サイズなどの単純なもの。
PreferencesAPIはこの要件に適していると思います。一言で言えば:
アプリケーションには、さまざまなユーザーや環境のニーズに適応するための設定データと構成データが必要です。この
java.util.prefs
パッケージは、アプリケーションがユーザーとシステムの設定および構成データを保存および取得する方法を提供します。データは、実装に依存するバッキングストアに永続的に保存されます。プリファレンスノードには、ユーザープリファレンス用とシステムプリファレンス用の2つの別個のツリーがあります。
ここには、短くて便利なチュートリアルがあります。そして、ここにあなたの要件に基づいた小さな例があります:
import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class SwingPreferencesTest {
private void createAndShowGUI() {
JTextField dummyTextField = new JTextField(20);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(dummyTextField);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
// Define default values here
System.out.println("width: " + prefs.getDouble("width", 100d));
System.out.println("height: " + prefs.getDouble("height", 100d));
System.out.println("x: " + prefs.getDouble("x", 0d));
System.out.println("y: " + prefs.getDouble("y", 0d));
// Set new values here
prefs.putDouble("width", frame.getPreferredSize().getWidth());
prefs.putDouble("height", frame.getPreferredSize().getHeight());
prefs.putDouble("x", frame.getLocationOnScreen().getX());
prefs.putDouble("y", frame.getLocationOnScreen().getY());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SwingPreferencesTest().createAndShowGUI();
}
});
}
}
初めて実行すると、コンソールに設定のデフォルト値が表示されます。
width: 100.0
height: 100.0
x: 0.0
y: 0.0
再度実行すると、これらの値が更新されます。私の場合:
width: 240.0
height: 59.0
x: 130.0
y: 130.0
以下の@Puceのコメントによると、Windowsのデータはレジストリに保存されます。これは、Windowsがユーザー/システム/ソフトウェアデータを保存するために使用する方法であるため、理にかなっています。HKEY_CURRENT_USER\JavaSoft\Prefs\[package\class name]
次の図に示すように、下の例で生成されたレジストリエントリを見つけることができます。
注: Windows 8 x64、JDK1.7でテスト済み
レジストリにこれらの設定を入力したくない場合は、(他のアプリケーションと同様に)アプリケーションフォルダーへのパスを保存し、このパスを使用してプレーンプロパティファイルから構成データを読み込むことができます。プリファレンスを使用し続ける(少なくともアプリケーションのパスを保存する)主な利点は、構成データを取得/保存するメカニズムがクロスプラットフォームになるように設計されており、JVM実装者(開発者ではない)が実際の実装を処理する必要があることです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加