作成されるレポートに表示されるディスプレイボックスの数がわからない場合があります。たとえば、1つまたは複数の変数を分析してレポートする一般的なスクリプトを作成する場合などです。スクリプトを実行するたびに変数の数が変わる可能性があるので、必要なディスプレイボックスの数はわかりません。
以下の節では、Append()、Prepend()、Delete()、およびSib Append()を使用して、レポートのディスプレイボックスを追加したり削除したりする方法を説明します。
Appendメッセージを使うと、既存の表示の末尾にディスプレイボックスを追加できます。スクリプトで、空のボックスを1つ作成し、Appendを使って分析の各変数用にそのボックスを追加します。Appendメッセージを使用して、既存の表示に独自の情報や組織名を追加することもできます。
次のコード例では、変数effectsList内に有効な名前のリストがあり、その名前が行列varprop内の列に対応していることを前提としています。つまり、effectsList[1]はvarprop[0,1]のラベルに、effectsList[2]はvarprop[0,2]のラベルにというように順次対応します。
varprop = [0 1 2, 3 4 5, 6 7 8];
effectsList = {"いち", "に", "さん"};
まず、H List Boxを含む空のOutline Box(アウトラインボックス)が作成されます。内部の空のコンテナにはhbという名前が付けられます。
win = New Window( "H List Boxの例",
Outline Box( "分散", hb = H List Box() )
);
次に、effectsListの項目数分だけforループを繰り返し、effectsListの各要素に対応したNumber Col Box(数値列ボックス)を追加します。
For( i = 1, i <= N Items( effectsList ), i++,
Eval(
Substitute(
Expr(
hb << Append(
Number Col Box( effectslist[i], varprop[0, i] )
)
),
Expr( i ), i
)
)
);
Sib Append()は、Append()に似ていますが、ディスプレイボックスを最後の子ディスプレイボックスの兄弟として作成します。図11.24に、Append()とSib Append()を比較する例があります。
PrependメッセージはAppendと同様に動作しますが、項目をディスプレイボックスの最後にではなく先頭に追加します。ディスプレイボックスが追加不可なタイプの場合、その子ディスプレイボックスのうち追加が可能なものに、Prependメッセージが送られます。このため、表示ツリーの先頭にコマンドを送っても問題ありません。
たとえば、次の例は最上部にボタンボックスのある「二変量」レポートを作成します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :Name("身長(インチ)") ), X( :Name("体重(ポンド)") ), Fit Line );
/* bivレポートレイヤーの最初のアウトラインボックスに
Prepend メッセージを送る */
(biv << Report)(Outline Box( 1 )) << Prepend(
// 2次曲線をあてはめるButton Boxを追加
Button Box( "2次曲線", biv << Fit Polynomial( 2 ) )
);
「2次曲線」ボタンをクリックすると、グラフに2次曲線が追加されます。
ツリーの最上部にこのボタンを追加しても、同じ結果となります。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :Name("身長(インチ)") ), X( :Name("体重(ポンド)") ), Fit Line );
biv << Report << Prepend( // レポートにprependメッセージを送る
// Button Boxをレポートの先頭に追加
Button Box( "2次曲線", biv << Fit Polynomial( 2 ) )
);
Deleteメッセージは、指定されたディスプレイボックスとその子をすべてレポートから削除します。完全に動的な表示を作成する場合、このメッセージとAppendおよびPrependメッセージを一緒に使うと便利です。次の例では、テキストボックスを別のテキストボックスに置き換えます。このケースではSet Textを使う方法もありますが、他の大半のディスプレイボックスは内容を変更できません。
win = New Window( "X",
list = V List Box(
t1 = Text Box( "t1" ),
t2 = Text Box( "t2" )
)
);
t1 << Delete;
list << Append( t1 = Text Box( "t1new" ) );
注: JMPのプラットフォームからは、ディスプレイボックスを削除しないようにしてください。Hide( 1 )メッセージまたはVisibility( "Hidden" )メッセージを、非表示にしたいディスプレイボックスに送ります。
Sib Appendメッセージを使うと、既存のディスプレイボックスのすぐ後ろにディスプレイボックスを追加できます。図11.23は、2つのピクチャーボックスツリーを示します。PictureBox( 1 )には、二変量の関係の散布図が含まれています。Picture Box ( 2 )には、緑の線と「平均のあてはめ」というテキストボックスが含まれており、これらは「平均のあてはめ」メニューに対応しています。
これらの2つのボックスの間にテキストボックスを挿入したいとします。Picture Box ( 1 )と同じレベルにボックスを追加する必要があるので、Sib Appendメッセージを送ります。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate(
Y( :Name("体重(ポンド)") ),
X( :Name("身長(インチ)") ),
Fit Mean( {Line Color( {57, 177, 67} )} )
);
/* Report関数はbivオブジェクトからレポートオブジェクトを戻す。
最初のPicture Boxのすぐ後ろにText Boxを追加する */
Report( biv )[Picture Box( 1 )] << Sib Append( Text Box( "Hello There" ) );
図11.23 同じレベルにテキストボックスを追加
注: 図11.23では、追加された兄弟テキストボックスが「ツリー構造の表示」ウィンドウの最初のピクチャーボックスの下に表示されています。従来の「ツリー構造の表示」ウィンドウのディスプレイツリーでは、兄弟は並べて表示されます。ディスプレイツリーの表示を参照してください。
図11.24は、Append()とSib Append()の違いを示しています。Append()は、ディスプレイボックスを親ディスプレイボックスの子として作成します。Sib Append()は、ディスプレイボックスを最後のディスプレイボックスの兄弟として作成します。
図11.24 Append(左)とSib Append(右)
注: 親ディスプレイボックスがV List Box()ではない場合、Sib Append()は、そのディスプレイボックスをV List Box()に入れます。