2009年12月13日日曜日

processing | Spring GUI

ライブラリはいろいろあるのですが、中でもGUIは便利です。
が、controlP5という結構人気のGUIはどうやら日本語を入力できないと思われます。

日本語入力が可能なGUIということで探していると
SpringGUIが見つかりました。AWTのGUIを基にしているらしい。
できたソフトはモバイル機で使いたいので小さいGUIがいいのですが、まぁとりあえずちゃんと動くということで仕方ないと考えました。


こちらは使い方も簡単です。


import SpringGUI.*;//ライブラリを読み込み
SpringGUI gui;
void setup() {
gui = new SpringGUI(this);//SpringGUIオブジェクトを生成
gui.addTextField("titleField", "TITLE", 10, 10, 200, 20);//テキストフィールドを追加
}

今度は前回のAWTらしきGUIと違ってサイズとか位置もばっちり来ます。

が、ちょっと問題がおきました。
それはカーソルをテキストフィールドに移したり、つまりフィールドを触るとエラーが起きるのです。
それはつまり、イベントハンドルを定義していないからだったんだと思われます。
では。
void handleEvent(String[] parameters) {
  // if the TextArea named "titleField" is changed,
  if ( parameters[1].equals("titleField") && parameters[2].equals("textChanged") ) {
    String txt = gui.getText("titleField");
  }
}

これは"textChanged"というイベントハンドラについての対応です。
しかし各GUIアクセスが「名前(この場合"titleField")」 とはちょっと変わっているような・・・、普通はオブジェクト名なのでは。

イベントハンドラはUIごとに決まっていて、 Reference - table of eventsに書かれています。
個々のGUIについてはたとえばtextFieldならばaddTextField()に書かれています。
個々のGUIのところにもイベントが書いてあればいいと思うのですが、なぜか別ページになっていてちょっとわかりにくいと思うのですが、まぁGUIが簡単に使えることに比べたらたいしたことはありません。
説明によると、String型配列の引数parametersはGUIの種類によって長さが異なる、ということですが、それでも0~2は共通しており、
0GUIエレメントのタイプ
1GUIエレメント名
2:イベント名
となっているとのこと。
たとえばtextFieldのように、もし他に値が入っている場合はparameter[3]などと書かれている。
つまりtextFieldの場合は
parameters[3] contains the new text in the element.
ということで
parameters = [<elementType>, <elementName><eventName>,<textData>]
ということになる。

制作・©:のぼる/N.Lab