タイトル今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(16)Preferencesの組み込み(2)環境設定を扱うクラスの設計カテゴリーJava, Cocoa, 今から始めるCocoaプログラミング
作成日2002/1/28 15:59:12作成者新居雅行
続いて環境設定を行うクラスの設計を行おう。ここでは、Cocoaに最初から用意されているウインドウを管理するクラスのNSWindowsを継承する。まず、MainMenu.nibのウインドウで、Classesのタブを選択する。そして、NSObject→NSResponder→NSWindowsというふうに階層をおりていき、NSWindowsをcontrolキーを押しながらクリックする。そして、表示されるメニューでSubclass NSWindowを選択する。

◇NSWindowのサブクラスを作成する
 

作成したサブクラスは、PreferencesWindowというクラス名にした。ここで、名前を変更するとともに、クラス名を選択してInfoパレットを表示し、クラスの情報を表示する。今回の一連のプログラムはJavaで作成しているので、languageはJavaを選択しておく。

◇作成したクラスのクラス名を設定し、Javaを選択する
 

このクラスで、環境設定のユーザインタフェースを管理する。当然ながらテキストフィールドに入力された値を知りたいので、4つのテキストフィールドそれぞれを参照するためのOutletを定義する。Outletのタブを選択して、addボタンをクリックするとOutletが追加されるので、そこで、initLeftTextFieldなどと名前を変更する。ここではTypeはidのままで良い。

◇テキストフィールドを参照するためのOutletを4つ定義する
 

ボタンは2つあるのだが、Closeボタンは単にクローズするだけにするので、特にプログラムは組まない。ここでは、OKボタンをクリックするとテキストフィールドにある値を記録するようにしたいので、OKボタン向けにActionを1つ定義した。

◇OKボタン用のActionを1つ定義する
 

そして、このPreferenceWindowクラスのソースを作成する。クラス名をcontrol+クリックして、表示されるメニューからCreate files for PreferencesWindowを選択する。保存する場所などを指定するシートがでてくるので、プロジェクトのフォルダとなっているのを確認してChooseボタンをクリックする。

◇クラスのソースファイルを作成する
 
 

引き続いて、Interface Builderの設定を行う。次に、MainMenu.nibのウインドウで、Instancesのタブを選択して、さきほど作成した環境設定のウインドウのアイコンをクリックして選択する。そして、Infoパレットを表示して、ポップアップメニューでCustom Classを選択する。最初はここはNSWindowが選択されているが、PreferencesWindowを選択する。これで、環境設定ウインドウは、PreferencesWindowクラスとして生成されるようになる。

◇ユーザインタフェースのクラスをPreferencesWindowに変更する
 

アプリケーションメニューのPreferencesを選択すると、環境設定のウインドウが開くように設定をしよう。ここでは、MainMenuから該当する項目を表示しておき、Preferencesのところからcontrolキーを押しながら、環境設定のWindowまでドラッグする。そして、Actionとして、makeKeyAndOrderFront()を選択してConnectボタンをクリックする。このメソッドは、NSWindowにあるものだが、要はウインドウをいちばん手前に表示してキー入力を受け付けるというものだ。つまり、Preferencesが選択されると環境設定ウインドウのmakeKeyAndOrderFrontメソッドが呼び出されて、環境設定ウインドウが表示されるという仕組みである。

◇Preferencesを選択すると環境設定ウインドウを表示するように設定
 

こうして、PreferencesメニューからActionに接続を行うと、Preferencesメニューは自動的に選択できるようになる。

次に環境設定ウインドウのコントロールからの接続を行おう。まず、Closeボタンをクリックすると、このウインドウが閉じられるようにする。そこで、CloseボタンからWindowに向かってcontrolキーを押しながらドラッグするわけだが、WebObjectsがインストールされていると、InfoパレットでOutletを選択しないといけない。いずれにしても、Closeボタンのtargetと、ウインドウのperformCloseを選択する。これだけで、Closeボタンをクリックすると、ウインドウが閉じるようになる。

◇CloseボタンからウインドウのperformCloseメソッドを接続する
 
 

さらに、OKボタンと、Windowの間を結ぶのであるが、OKボタンは独自に定義したActionであるsetupInitValueと接続しておいて、この名前のメソッドを呼ぶことにする。

◇OKボタンからはsetuInitValueを接続する
 

さらに、PreferencesWindowのアウトレットが、ウインドウ上のテキストフィールドを参照できるようにしておく。Windowから、ウインドウ上のテキストフィールドにcontrol+ドラッグして、対応するOutletとの接続を行っておく。

◇PreferencesWindowのOutletとテキストフィールドを結んでおく
 
 

とりあえず、ここまでで、Interface Builder側の作業は一通り終わる。いちおう、流れを示したが、もちろん、実際に作るときにはいろいろと試行錯誤を行っている。いずれにしても、ポイントとなる部分が合っていれば、後はどういう手順で作業をしてもかまわないのである。
続いてクラスのプログラムを作っていくが、次回に説明を行う。
(この項、続く)
関連リンク