SWT Tips and Samples 基礎編 > PreferenceStore

 

PreferenceStore

PreferenceStoreクラスは、アプリケーションの設定を管理するためのクラスです。JFaceのライブリーですがGUIを扱うクラスではなく、設定内容を読み込んだり、保存したりする機能のみのクラスです。PreferenceStoreとPreferenceDialog、PreferenceManagerを組み合わせて使うと比較的簡単に設定変更用のGUIを作ることができるのです。

基本操作

まずは基本的な操作方法を以下に示します。

PreferenceStore ps = new PreferenceStore("test.properties");

//属性をセットする
ps.setValue("value1", "サンプル");

//属性を読み込む
ps.getString("value1");
ps.getInt("...");
ps.getBoolean("...");
...

//設定内容をロードする
try {
   ps.load();
} catch (IOException e) {
   ...
}

//設定内容を保存する
try{
   ps.save();
} catch (IOException e) {
   ...
}

save()メソッドで保存が行われると、上の例ではアプリケーションを実行したディレクトリに、以下のようなtest.propertiesというファイルが生成されます。属性value1に値が設定されているのが分かります。ちなみに日本語の文字列は、Unicode形式で出力されています。

#Tue Aug 31 11:43:09 JST 2004
value1=\u30B5\u30F3\u30D7\u30EB

デフォルト属性の設定

PreferenceStoreクラスには、設定の読み込み、保存の機能以外にも、デフォルト属性を前もって用意しておくことができ、デフォルト値に設定を戻したいときなどに利用できます。

//デフォルトの属性をセット。
//この属性はsavaメソッドを実行してもファイルには書き込まれない
ps.setDefaultValue("value1", "デフォルト文字列");

//デフォルトの属性を反映させる
ps.setToDefault("value1");

属性変更をすぐに反映させる

setValueメソッドなどを使って変更が行われた属性を、アプリケーションの概観などにすぐに反映させる必要がある場合、IChangePropertyListenerを使うと便利です。setValueなどで属性が変更されると、このインターフェースのpropertyChange()メソッドが呼び出されます。

PreferenceStore ps = ...;
MyTextWidget text = new ...;
ps.addPropertyChangeListener(text);
...
ps.setValue("value1", "こんにちは");
...
class MyTextWidget implements IChangePropertyListener{
  ...
  public void propertyChange(PropertyChangeEvent e){
    String str = ps.getString("value1");
    setText(str);
  }
  ...
}

サンプルプログラム

フォント情報をPreferenceStoreで管理したサンプルプログラムです。「フォントの変更」ボタンを押すとFontDialogが表示されます。そこで変更されたフォント情報は、PreferenceStoreに格納され、アプリケーション終了時にtest.propertiesというファイルに設定が保存されます。したがってアプリケーションを再起動しても、変更されたフォントでテキストが表示されるわけです。

ソースコード (PreferenceStoreTest.java)

import java.io.IOException;

import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.*;

public class PreferenceStoreTest implements IPropertyChangeListener {

   private PreferenceStore ps;
   private Display display;
   private Font font;
   private Text text;
   public static void main(String[] args) {
      new PreferenceStoreTest();
   }
   public PreferenceStoreTest() {
      display = new Display();
      final Shell shell = new Shell(display);
      shell.setText("PreferenceStoreTest");

      shell.setLayout(new GridLayout(2, false));

      ps = new PreferenceStore("test.properties");
      ps.addPropertyChangeListener(this);

      FontData defaultFontData = new FontData("MS Pゴシック", 12, 
                                              SWT.NORMAL);
      ps.setDefault("fontdata", defaultFontData.toString());

      try {
         ps.load();
      } catch (IOException e) {
         //ファイルが存在しない場合はデフォルトのフォントを設定する
         System.out.println("ファイルが存在しません");
         ps.setToDefault("fontdata");
      }      

      Button fontDialogButton = new Button(shell, SWT.PUSH);
      fontDialogButton.setText("フォントの変更");
      fontDialogButton.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent e) {
            FontDialog d = new FontDialog(shell);
            d.setFontList(font.getFontData());
            d.setText("フォントの変更");
            FontData fd = d.open();
            if (fd != null) {
               ps.setValue("fontdata", fd.toString());
            }
         }
      });

      Button defaultFontButton = new Button(shell, SWT.PUSH);
      defaultFontButton.setText("デフォルトのフォントを使用");
      defaultFontButton.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent e) {
            ps.setToDefault("fontdata");
         }
      });

      text = new Text(shell, SWT.MULTI | SWT.BORDER);
      GridData gd = new GridData(GridData.FILL_BOTH);
      gd.horizontalSpan = 2;
      text.setLayoutData(gd);
      text.setText("PreferenceStoreのテストプログラム");
      font = new Font(display, new FontData(ps.getString("fontdata")));
      text.setFont(font);

      shell.addShellListener(new ShellAdapter(){
         public void shellClosed(ShellEvent event) {
            //変更が行われていた場合は、設定ファイルを保存する
            if (ps.needsSaving()){
                try {
                  ps.save();
                  System.out.println("test.propertiesは保存されました。");
               } catch (IOException ex) {
                  ex.printStackTrace();
               }
            }
         }
                });

      shell.setSize(300, 200);
      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
      display.dispose();
      font.dispose();
   }

   //属性に変更があるとこのメソッドが呼び出される
   public void propertyChange(PropertyChangeEvent event) {
      System.out.println(event.getProperty() + ":");
      System.out.println(" Old: " + event.getOldValue());
      System.out.println(" New: " + event.getNewValue());
      if (text != null) {
         FontData fd = new FontData(ps.getString("fontdata"));
         Font oldFont = font;
         font = new Font(display, fd);
         text.setFont(font);
         oldFont.dispose();
      }
   }
}

参考リンク



最新更新日: 2004年8月31日
 
関連リンク
Eclipse API ドキュメント
PreferenceStore
IPropertyChangeListener
PropertyChangeEvent
Font
FontData
ShellAdapter

- PR -

プレゼンテーション作成ソフト無料お試し版配信中

【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!

オフィス用品・オフィス家具 価 格 交 渉 可! 
◎ 目指せ★業界最安値 ★ ◎ オフィネット・ドットコム株式会社

注文から納品まで驚きの早さ!!【ASKULカタログ】はこちらから・・・

マイクロソフト お得な見積! まとめての購入ならオトクな方法で。ライセンスだから管理も簡単。


Copyright(C) 2003,2004 Jasmin Project. All Right Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送