開発者が独自のウィンドウを作成した場合で、ユーザがそのウィンドウで選択したオプションを取得するには、3つの方法があります。以下で、それら3つの方法(Return Resultメッセージ、Getメッセージ、Get Selectedメッセージを使う方法)を紹介します
ユーザが[OK]をクリックしたときにNew Window()スクリプトによって自動的に結果が戻されるようにするには、Modalメッセージの後にReturn Resultメッセージを含めます。
win = New Window( "値の指定",
<<Modal,
<<Return Result,
Text Box( "この値を指定" ),
variablebox = Number Edit Box( 42 ),
Button Box( "OK" ),
Button Box( "キャンセル")
);
Write( win["variablebox"] ); // variablebox 変数を添え字として指定
33 // ユーザがNumber Edit Boxに「33」と入力した場合
次の例では、チェックボックスが選択されている場合は1、選択されていない場合は0を戻すGetメッセージを使っています。また、選択内容を表示するのに、スクリプトの終わりにShow()式を追加しています。
win = New Window( "V List Box",
<<Modal,
V List Box(
kb1 = Check Box( "a" ),
kb2 = Check Box( "b" ),
kb3 = Check Box( "c" )
),
Button Box( "OK",
val1 = kb1 << Get; // 最初のチェックボックスの値を取得する
val2 = kb2 << Get;
val3 = kb3 << Get;
)
);
Show( val1, val2, val3 ); // ウィンドウが閉じた後に変数を戻す
val1 = 1; // 最初と2番目のチェックボックスは選択されていた
val2 = 1;
val3 = 0; // 3番目のチェックボックスは選択されていなかった
選択されている列の名前を戻すGet Selectedメッセージを含め、その列を「二変量」プロットに挿入します。
メモ: 値を取得する方法2と方法3は、例は異なりますが、方法としては同一です。どちらの例でも、ウィンドウ内にあるコントロールからのJSLコールバックを使用しています。JSLコールバックは、ウィンドウ内のディスプレイボックスの値をグローバル変数に割り当てることで、ウィンドウを閉じた後もその値が使用できるようにします。方法2では、ボタンボックスにJSLコールバックがあります。方法3では、リストボックスにJSLコールバックがあります。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
xvar = .;
yvar = .;
win = New Window( "値を戻す例",
<<Modal,
// ユーザに対し、[OK]をクリックする前に2つの変数を選択するよう求める
<<On Validate(
Show( xvar, yvar );
If( Is Missing( xvar ) | Is Missing( yvar ),
0, // xvarまたはyvarがない場合は、[OK]がクリックされても何もしない
1
);
),
Text Box( "2つの数値タイプの列を選択してください。" ),
H List Box(
Text Box( " X, 説明変数" ),
x = Col List Box(
dt, // データテーブル参照
all, // データテーブルの列をすべて表示する
xvar = (x << Get Selected)[1];
// ウィンドウが閉じる前に選択されている列の名前を取得する
Show( xvar );
),
Text Box( "Y, 応答" ),
y = Col List Box(
dt,
all,
yvar = (y << Get Selected)[1];
Show( yvar );
)
)
);
xcol = Column( dt, xvar ); // 列を取得する
ycol = Column( dt, yvar );
dt << Bivariate( Y( ycol ), X( xcol ) ); // 「二変量」プロットを作成する