Problem
Sie möchten ein Schiebereglerfeld verwenden, um einen kontinuierlichen Wert festzulegen, und Sie möchten den aktuellen Wert sehen, während Sie den Schieberegler bewegen.
Lösung
Erstellen Sie ein Schiebereglerfeld und ein Zahlenbearbeitungsfeld. Fügen Sie dem Schiebereglerfeld ein Skript hinzu, um das Zahlenbearbeitungsfeld zu aktualisieren. Fügen Sie dem Zahlenbearbeitungsfeld ein Skript hinzu, um das Schiebereglerfeld zu aktualisieren.
Eggs = 50;
Bacon = 50;
New Window( "Slider Display",
Border Box( Left( 10 ), Right( 10 ), top( 10 ), bottom( 10 ),
V List Box(
H List Box(
Text Box( "Eggs" ), // slider label
eggssb = Slider Box( 0, 100, Eggs, // slider script follows...
eggsnb << set( Eggs ); // update the value
// this example doesn't need any other interactive
// update. You could do some other work here, using
// the slider's value to change a graph, perhaps.
),
// text box to hold the slider's value...
eggsnb = Number Edit Box( Eggs, <<SETFUNCTION></SETFUNCTION>
Window with Slider and Edit boxes launches 2nd windowWindow with Slider and Edit boxes launches 2nd windowFenster mit Schieberegler und Bearbeitungsfeldern öffnet das zweite Fenster
Diskussion
Das Schiebereglerfeld und das Zahlenbearbeitungsfeld weisen unterschiedliche Verhaltensweisen auf. Die Slider-Box behält die Variable (z. B. Eier) bei und aktualisiert diese Variable, wenn sich der Slider bewegt. Das Slider-Callback-Skript kann die Variable direkt verwenden. Das Zahlenbearbeitungsfeld behält die Variable nicht bei und aktualisiert sie nicht. Die Rückruffunktion für die Eggs-Nummernbearbeitung verwendet <
Sie könnten eine etwas einfachere Variante mit TextBox anstelle von NumberEditBox erstellen, aber wahrscheinlich möchten Sie einen genauen Wert eingeben, was mit einem Schieberegler schwierig ist.
Siehe auch
http://www.jmp.com/support/help/Display_Boxes.shtml
Hilfe->Bücher->JSL-Syntaxreferenz
Sie können eine Slider-Box dazu bringen, eine ganzzahlige Ausgabe zu liefern, indem Sie sie im Skript der Slider-Box runden:
Names Default To Here( 1 );
sliderValue = .6;
New Window("Slider", v list box(
text box("Slider box with integer output."),
slider box(
0,
10,
sliderValue,
sliderValue = round(sliderValue);
tb << Set Text( char( sliderValue ) )
),
tb = text box("")
));Danke!
Sie müssen hinzufügen
gb<<INVAL></INVAL>
in den beiden Rückruffunktionen (für Bearbeitungsfelder für Eier und Specknummern), um die GraphBox zu benachrichtigen, sich selbst neu zu zeichnen. < ungültig machen und löst eine Neuzeichnung aus. So wie Sie das Diagrammfeld geschrieben haben, werden die geänderten Daten beim Neuzeichnen übernommen.
Hallo Craig
Vielen Dank für jeden tollen Beitrag!
Ich habe Ihr Skript leicht geändert, um ein Problem zu veranschaulichen, das ich habe:
Eggs = 50;
Bacon = 50;
New Window( "Slider Display",
Border Box( Left( 10 ), Right( 10 ), top( 10 ), bottom( 10 ),
V List Box(
H List Box(
Text Box( "Eggs" ), // slider label
eggssb = Slider Box(
0,
100,
Eggs,
gb << Set Graphics Script( Marker( {Bacon, Eggs} ) );// slider script follows...
eggsnb << set( Eggs ); // update the value
// this example doesn't need any other interactive
// update. You could do some other work here, using
// the slider's value to change a graph, perhaps.
),
// text box to hold the slider's value...
eggsnb = Number Edit Box(
Eggs,
<<SETFUNCTION></SETFUNCTION>Mein Problem ist, dass das Diagramm nicht aktualisiert wird, wenn ich eine Zahl in das Zahlenbearbeitungsfeld eingebe. Der Schieberegler bewegt sich, wenn ich die Eingabetaste drücke, aber das Diagramm spiegelt die Änderung nicht wider. Ich habe ein paar Dinge ausprobiert, kann aber nicht herausfinden, wie ich das Problem beheben kann.
Ich hoffe, Sie können helfen?
BR
Jesper