タイトル【今から始めるCocoaプログラミング】最初のアプリケーション(4)線で結びクラスを生成カテゴリーProjectBuilder/Interface Builder, 今から始めるCocoaプログラミング
作成日2000/12/19 10:41:27作成者新居雅行
CocoaアプリケーションをJavaで作成するシリーズは、プロジェクトのひな形から、Interface Builderを使ってコントロールをウインドウに配置し、さらに中間層になるController層のクラスをプログラムで作るところまでを説明した。前回はそのクラスを作り、OutletとActionsを作成した。3つあるテキストフィールドに対応したOutletと、ボタンを押したときに呼び出すActionを1つ設定したが、それらを実際に対応付けることにしよう。

まず、Interface Builderで定義したクラスを、実際のソースプログラムとして反映させる作業を行なう。文書ウインドウ(MyDocument.nib)でClassesのタブを選択した状態で、新たに作ったMyWindowControllerというクラスを選択しておく。そして、ClassesメニューからCreate Fileを選択する。これによって、設定として作成したクラスの実物を作ると思えばよいだろうか。クラスの実物はプログラミングレベルでは、ソースファイルである。つまり、MyWindowControllerのクラスのソースファイルを作成する。メニュー選択すると、そのファイルを保存する場所をたずねるダイアログボックスが表示される。ここで、通常は、プロジェクトのルートフォルダ、すなわちmain.mファイルなどと同じ場所にファイルを作っておけば良いだろう。ファイル名は自動的にクラス名.javaになる。Project Builderに項目を追加するチェックボックスもあるので、もちろんオンにする。なお、たぶん、バグだと思うが、この大ログボックスを最初に表示した段階では、Chooseボタンをクリックできない。上部のリストで、プロジェクトのフォルダをクリックして選択すると、ボタンをクリックできるようになる。

◇ClassesメニューからCreate Fileを選択する
 
◇作成したソースファイルを作成する場所を指定する
 

作成したクラスのプログラムについては後から確認しよう。

いよいよ、ウインドウ上のコントロールと、作成したクラスとを結び付ける。MyDocument.nibのウインドウでInstancesのタブを選択すると、インスタンス科されたMyWindowControllerが見えている。そこと、実際のウインドウの設計画面を両方見えるようにしておく。まず、ボタンをクリックしたら、MyWindowControllerのActionが呼び出されるように設定しよう。動作のきっかけが発生するボタンの側から、controlキーを押したままドラッグを行なう。ドラッグ先は、インスタンス化されたMyWindowControllerのアイコンである。

◇ボタンからMyWindowControllerまでをcontrolキーを押しながらドラッグする
 

ドラッグを終了すると、インスペクタのウインドウがアクティブになる。ここで、左側はドラッグ元のボタンのOutletであり、右側はドラッグ先のMyWindowControllerのActionが一覧されている。ボタンのtargetというOutletは、クリックしたときにメッセージが送りだされる出口だと考えればよいだろう。右側では作成したActionのclickButtonが見えているので、それを選択してConnectボタンをクリックする。これによって、ボタンをクリックすると、MyWindowControllerのclickButtonというメソッドが呼び出されるわけだ。なお、ドラッグミスでキャンセルしたい場合には、ボタンなどを配置したウインドウの何もないあたりを適当にクリックするとキャンセルされる。言い換えれば、Connectボタンをクリックしない限りは線で結ぶ設定は記録されないのである。

◇ボタンのtargetを、クラスのActionに接続する
 

ボタンとクラスのActionを結ぶと、ボタンがクリックされればActionが呼び出されるという結びつきは何となく分かりやすい。次は、逆にクラスのOutletは実はテキストフィールドであるという結びつきを定義する。これはちょっとイメージしづらいかもしれない。
今度は、MyDcoment.nibのウインドウにあるインスタンス化されたMyWindowControllerから、コントロールを配置してあるウインドウ上の1つのテキストフィールドに対して、controlキーを押しながらドラッグを行なう。コントロールに向かってドラッグを行なうわけだ。この場合もやはりインスペクタウインドウが必ず現れるが、左側のリストには、MyWindowControlクラスに定義したOutletが一覧される。ここでは、TextField1を選択することにする。右側には、テキストフィールドのActionが一覧されると考えられるが何も出ていない。とりあえず、左側だけ選択して、Connectボタンをクリックしよう。

◇インスタンス化したクラスからテキストフィールドに向かってcontrol+ドラッグ
 

 

ここで、残りのテキストフィールドについてもOutletと結び付けて…と思いたいところだが、線で結ばないと何が起こるのかを見るために、あえて、1つのOutletと、1つのテキストフィールドを結ぶだけで以下の作業をやってもらいたい。
関連リンク