問題您需要構建一個自定義計算器,以顯示基於多個輸入值的數字表。
解決方案使用數字編輯框獲取值並使用 Set Function 方法將 JSL 附加到數字編輯框以在值更改時重新計算表格。 使用表格框來保存數字列。 當值改變時重建數字列。
if( jmpversion()<"13", Open Log(1); throw("requires JMP 13 or greater")); // 需要默認值來設置編輯框 borrow = 1e5;年 = 2;四月 = 15; cur = "美元"; // "EUR" New Window( "table demo", Border Box( Left( 5 ), Right( 5 ), bottom( 5 ), // 這個框擴展了淡綠色幾個像素 V List Box( // border boxes需要一個單獨的孩子,比如一個 vlist,來容納一切 Border Box( Left( 20 ), Right( 20 ), top( 10 ), bottom( 10 ), // 數據輸入邊框 H List Box( // 分隔數據來自“有趣”標題的輸入字段 V List Box( // 三個垂直輸入字段及其標籤 H List Box( // 一個字段及其標籤 Number Edit Box( // 一個字段 borrow, < 12, month -= 12; year += 1; ); dates[i ] = Date DMY( day, month, year ); month += 1; ); While( !Is Empty( tb << child ), (tb << child) << delete ); // 刪除之前的數據,如果有的話// 將新列添加到表中 tb << append( Number Col Box( "Due Date", dates, <我不是財務人員。 不要假設我正確地使用了公式。 我選擇了綠色陰影並指定了一些表格框參數以使表格更具吸引力。 我不是藝術家,你可以做得更好。 通過使用 AutoStretching 和 MaxSize 選項,綠色間隔框形成一個漂亮的顏色條並填充頁面而不會使頁面變寬。 freshen() 函數從所有三個數據輸入字段中調用,並且不關心哪個字段發生了變化。 您可以做一些更複雜的事情,但除非您的計算速度非常慢,否則請保持簡單。 可以右擊表格,製作成數據表格,進一步處理數據;您可能想要一種使用數據表保存參數的方法(可能是另一個按鈕來製作數據表)。 您還可以記錄包含參數的報告。
也可以看看Help->Books->Scripting Guide 有更多關於表格框的信息
2021 年初開始編寫腳本,這篇文章非常有用。 我複制了上面的大部分腳本並為我自己的計算器修改了它,我打算在另一個平台上使用它的輸出。
然而,我對我所取得的成就並不完全滿意。 當我第一次打開並運行我的腳本時,我會看到兩個預填充的數字框,我可以在其中輸入值。

只有當我更改預填數字框中的一個值時,才會出現第三個框,其中包含我實際上有興趣進一步使用的結果。

我想我遇到了這個,因為我創建的是基於提供的代碼@Craige_Hales多於。
- 我怎樣才能使第三個框(上面用紅色圈出)從一開始就出現,但也根據其他兩個框中的輸入值進行更新?
- 是否有更有效的解決方案來構建小型計算器或使用不必要的複雜方法?
在這一點上我還想提一下,是的,我一直在研究腳本指南和腳本索引,但我還不夠強大,無法提出自己的解決方案。 (不過我沒有瀏覽“跳轉到 JMP 腳本”,因為我目前無法訪問我的副本。)
Names default to here ( 1 );
// some default values for the first two number edit boxes
CurrentConc_wt% = 45.00;
LowestAcceptConc_wt% = 40.00;
New Window( "Calculating Concentration acceptance limit",
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Some comment")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Instructions: [add instructions here later]")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // added this because I copied this code and left in there, just in case...
V List Box( // border boxes need a single child, like a vlist, to hold everything
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // border for data entry boxes
H List Box(
V List Box(
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ),
H List Box(
Number Edit Box(
CurrentConc_wt%,
<<SETFORMAT></SETFORMAT>
我還需要一段時間才能更深入地研究這個問題。 但我認為您可能只是錯過了原始 JSL 末尾的調用 freshen() ,它在那裡初始化所有框,就好像已經單擊了某些東西一樣。
謝謝,這是一個簡單的修復。 也許畢竟有理由感到滿意。