任意オブジェクトの分解
任意オブジェクトの分解
GUIKitで提供されていた機能は,組込みのWolfram言語にネイティブのインターフェース構造およびコントロール関数で利用できるようになった.
GUIKit ウィジェット式はユーザインターフェースの問題を念頭に置いて設計されたものではあるが,ユーザインターフェースウィジェットに無関係のオブジェクトツリーを構築し,尚且つ特性を使用してWolfram言語コードのスクリプトと設定と獲得の状況を利用することができる.
GUIResolveを使うと,定義を自分のランタイムJavaオブジェクトに分解するが,GUIObjectランタイムシステムを公開することも,内部コンテキストの状態を固定することもせずにおくことができる.これは,オブジェクト定義が単にJavaオブジェクトのセットに分解できるのであれば役に立つ.Javaオブジェクトは標準的な J/Link の呼出しを通して他の方法で使うことができる.
Needs["GUIKit`"];この例題では,コンテナにデータを入れる際にWolfram言語スクリプトコードが使われているが,式の中のルートオブジェクトは単純なJavaコレクションオブジェクトである点に注意のこと.
myList = GUIResolve[Widget["class:java.util.ArrayList", {InvokeMethod["addAll", InvokeMethod[{"class:java.util.Arrays", "asList"}, {Widget["Label", {"text" -> "Label1"}, WidgetLayout -> None], "string1", "string2", Widget["Label", {"text" -> "Label2"}, WidgetLayout -> None], Widget["class:java.util.Date"]}]], Script[(InvokeMethod[{"myList", "add"}, #1]&) /@ {ToString[10!], 34};]}, Name -> "myList"]]一旦JavaObjectが定義によって決められると,J/Link の呼出しをオブジェクトインスタンスに使い続けることができる.
myList @ size[]myList @ toString[] // InputForm