问题您需要构建一个自定义计算器,以显示基于多个输入值的数字表。
解决方案使用数字编辑框获取值并使用 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() ,它在那里初始化所有框,就好像已经单击了某些东西一样。
谢谢,这是一个简单的修复。 也许毕竟有理由感到满意。