SWT Tips and Samples 基礎編 > PreferenceStore |
|
PreferenceStorePreferenceStoreクラスは、アプリケーションの設定を管理するためのクラスです。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日 |
- PR -
【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!
オフィス用品・オフィス家具 価 格 交 渉 可!
|
||||
|
|||||
Copyright(C) 2003,2004 Jasmin Project. All Right Reserved. |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||