Samples > PreferenceDialog

 

PreferenceDialogを使ってツリー型の設定ダイアログを作る

JFaceに提供されているPreferenceDialogでツリー型の設定ダイアログを簡単に作ることができます。ツリーのノードに対応するいくつかのページを用意し、それをPreferenceDialogを管理するPreferenceManagerに追加していくという形でコーディングします。下の例では、NODE1にNODE2を子要素として追加しています。

PreferenceManager pm = new PreferenceManager();

PreferenceNode pnode1 = new PreferenceNode("NODE1");
//独自クラスPreferencePage1をセット
pnode1.setPage(new PreferencePage1());
pm.addToRoot(pnode1);

PreferenceNode pnode2 = new PreferenceNode("NODE2");
//独自クラスPreferencePage2をセット
pnode2.setPage(new PreferencePage2());
pm.addTo("NODE1", pnode2);

PreferenceDialog dialog = new PreferenceDialog(shell, pm);
dialog.open();

それぞれのページについては、PreferencePageを継承して、いくつかのメソッドをオーバーライドします。createContentsメソッドに表示するウィジェットの配置を行います。またperformOKメソッドや、performApplyメソッドをオーバーライドして入力された値を確定値として他の変数にセットするような処理を行えばよいでしょう。

class PreferencePage1 extends PreferencePage{
   public MyPage(){
      setTitle("...");
      setMessage("...");
   }
   protected Control createContents(Composite parent) {
      Composite c = new Composite(...);
      ...
      return c;
   }
   //プリファレンスページのApplyボタンが押されたときに呼び出される。
   protected void performApply() {
      ...
   }
   //ダイアログのOKボタンが押されたときに呼び出される。
   public boolean performOk() {
      ...
   }
}

スクリーンショット

ソースコード (PreferenceDialogTest.java)

import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceNode;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class PreferenceDialogTest extends ApplicationWindow {

        private String value1 = "";
        private String value2 = "";

        public PreferenceDialogTest() {
                super(null);

        }
        public static void main(String[] args) {
                ApplicationWindow w = new PreferenceDialogTest();
                w.setBlockOnOpen(true);
                w.open();
                Display.getCurrent().dispose();
        }

        protected Control createContents(Composite parent) {
                getShell().setText("PreferenceManagerTest");
                Composite container = new Composite(parent, SWT.NONE);

                container.setLayout(new FillLayout());
                Button b = new Button(container, SWT.PUSH);
                b.setText("設定画面を開く");
                b.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                openPreferenceDialog();
                        }
                });

                return container;
        }
        private void openPreferenceDialog() {
                PreferenceManager pm = new PreferenceManager();

                PreferenceNode pnode1 = new PreferenceNode("NODE1");
                pnode1.setPage(new PreferencePage1());
                pm.addToRoot(pnode1);

                PreferenceNode pnode2 = new PreferenceNode("NODE2");
                pnode2.setPage(new PreferencePage2());
                pm.addTo("NODE1", pnode2);

                PreferenceDialog dialog = new PreferenceDialog(getShell(), pm);
                dialog.open();
                System.out.println("value1: " + value1);
                System.out.println("value2: " + value2);

        }

        class PreferencePage1 extends PreferencePage {
                Text text;
                public PreferencePage1() {
                        setTitle("ページ1");
                        setMessage("ページ1のメッセージ");
                }
                protected Control createContents(Composite parent) {
                        Composite c = new Composite(parent, SWT.NONE);
                        c.setLayout(new GridLayout(2, true));
                        new Label(c, SWT.NONE).setText("パラメータ1:");
                        text = new Text(c, SWT.SINGLE | SWT.BORDER);
                        return c;
                }
                protected void performApply() {
                        if (getControl() == null){
                                return;
                        }
                        value1 = text.getText();
                }
                public boolean performOk() {
                        performApply();
                        return true;
                }
        }

        class PreferencePage2 extends PreferencePage {
                Text text;
                public PreferencePage2() {
                        setTitle("ページ2");
                        setMessage("ページ2のメッセージ");
                }
                protected Control createContents(Composite parent) {
                        Composite c = new Composite(parent, SWT.NONE);
                        c.setLayout(new GridLayout(2, true));
                        new Label(c, SWT.NONE).setText("パラメータ2:");
                        text = new Text(c, SWT.SINGLE | SWT.BORDER);
                        return c;
                }
                protected void performApply() {
                        if (getControl() == null){
                                return;
                        }
                        value2 = text.getText();
                }
                public boolean performOk() {
                        performApply();
                        return true;
                }
        }
}


最新更新日: 2004年8月8日
 
関連リンク
Eclipse API ドキュメント
PreferenceDialog
PreferenceManager
PreferenceNode
PreferencePage

- PR -

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

シマンテック 割引価格! オンライン販売だから低価格。いつでも簡単、見積・購入。

■原石のままでは、終わりたくない貴方へ!キャリアアップ転職を成功へとナビゲート

秋葉原・なんば・名古屋・札幌に店舗を構えるパソコンショップ!【ツクモ】


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