i have spinner want use configure time task. in case cant set numeric value spinner , combobox set in hours or in minutes convert value:
import java.util.concurrent.timeunit; import javafx.application.application; import static javafx.application.application.launch; import javafx.beans.value.changelistener; import javafx.beans.value.observablevalue; import javafx.scene.scene; import javafx.scene.control.combobox; import javafx.scene.control.spinner; import javafx.scene.control.spinnervaluefactory; import javafx.scene.layout.hbox; import javafx.stage.stage; public class mainapp extends application { @override public void start(stage stage) throws exception { spinner spinner = new spinner(); spinner.setvaluefactory(new spinnervaluefactory.integerspinnervaluefactory(0, 10000)); spinner.seteditable(true); combobox comb = new combobox(); comb.getitems().addall( "milliseconds", "seconds", "minutes", "hours", "days" ); comb.getselectionmodel().selectfirst(); spinner.valueproperty().addlistener(new changelistener<number>() { @override public void changed(observablevalue<? extends number> ov, number old_val, number new_val) { string value = comb.getselectionmodel().getselecteditem().tostring(); long convertedvalue = 0; switch (integer.parseint(spinner.getvalue().tostring())) { case 1: value = "milliseconds"; convertedvalue = integer.parseint((string) spinner.getvalue()); break; case 2: value = "seconds"; convertedvalue = timeunit.seconds.tomillis((long) spinner.getvalue()); break; case 3: value = "minutes"; convertedvalue = timeunit.minutes.tomillis((long) spinner.getvalue()); break; case 4: value = "hours"; convertedvalue = timeunit.hours.tomillis((long) spinner.getvalue()); break; case 5: value = "days"; convertedvalue = timeunit.days.tomillis((long) spinner.getvalue()); break; } system.out.println(">>>>> " + convertedvalue); } }); hbox hb = new hbox(); hb.getchildren().addall(spinner, comb); hb.setspacing(50); scene scene = new scene(hb); stage.settitle("javafx , maven"); stage.setscene(scene); stage.show(); } public static void main(string[] args) { launch(args); } } spinner keep value in milliseconds based on combo box selection need convert example 5 minutes milliseconds. how can implement listener? , of course when have 5000 milliseconds display them minutes.
how one? guess main mistake in code-example inside switch-statement switch spinner value instead combobox-value. example corrrects problem , in system.out.println(...) @ end can see original value , converted value printed. can use further in application.
edit: added hint in comment. can enter time in milliseconds, seconds, ... (remember press enter - otherwise event not triggered) after combobox changed changed value written spinner - want want enlarge maximumvalue in spinner allow higher entries in milliseconds). based on integer-calculation. rounding adjustments time lost.
import java.util.concurrent.timeunit; import javafx.application.application; import javafx.beans.value.changelistener; import javafx.beans.value.observablevalue; import javafx.scene.scene; import javafx.scene.control.combobox; import javafx.scene.control.spinner; import javafx.scene.control.spinnervaluefactory; import javafx.scene.layout.hbox; import javafx.stage.stage; public class mainapp extends application { long milliseconds; string unitatlastchange; int originalvalue; @override public void start(stage stage) throws exception { spinner<integer> spinner = new spinner<>(); spinner.setvaluefactory(new spinnervaluefactory.integerspinnervaluefactory(0, 10000)); spinner.seteditable(true); combobox<string> comb = new combobox<>(); comb.getitems().addall("milliseconds", "seconds", "minutes", "hours", "days"); comb.getselectionmodel().selectfirst(); this.unitatlastchange = comb.getselectionmodel().getselecteditem(); spinner.valueproperty().addlistener(new changelistener<integer>() { @override public void changed(observablevalue<? extends integer> ov, integer old_val, integer new_val) { mainapp.this.unitatlastchange = comb.getselectionmodel().getselecteditem(); mainapp.this.originalvalue = new_val.intvalue(); switch (mainapp.this.unitatlastchange) { case "milliseconds": mainapp.this.milliseconds = new_val.intvalue(); break; case "seconds": mainapp.this.milliseconds = timeunit.seconds.tomillis(new_val.intvalue()); break; case "minutes": mainapp.this.milliseconds = timeunit.minutes.tomillis(new_val.intvalue()); break; case "hours": mainapp.this.milliseconds = timeunit.hours.tomillis(new_val.intvalue()); break; case "days": mainapp.this.milliseconds = timeunit.days.tomillis(new_val.intvalue()); break; default: throw new runtimeexception("error - wrong value"); } system.out.println("converted: " + mainapp.this.originalvalue + " " + mainapp.this.unitatlastchange + " original: " + mainapp.this.milliseconds + " milliseconds"); } }); comb.valueproperty().addlistener(new changelistener<string>() { @override public void changed(observablevalue<? extends string> observable, string oldvalue, string newvalue) { switch (newvalue) { case "milliseconds": mainapp.this.originalvalue = (int) mainapp.this.milliseconds; break; case "seconds": mainapp.this.originalvalue = (int) timeunit.milliseconds.toseconds(mainapp.this.milliseconds); break; case "minutes": mainapp.this.originalvalue = (int) timeunit.milliseconds.tominutes(mainapp.this.milliseconds); break; case "hours": mainapp.this.originalvalue = (int) timeunit.milliseconds.tohours(mainapp.this.milliseconds); break; case "days": mainapp.this.originalvalue = (int) timeunit.milliseconds.todays(mainapp.this.milliseconds); break; default: throw new runtimeexception("error - wrong value"); } spinner.getvaluefactory().setvalue(integer.valueof(mainapp.this.originalvalue)); } }); hbox hb = new hbox(); hb.getchildren().addall(spinner, comb); hb.setspacing(50); scene scene = new scene(hb); stage.settitle("javafx , maven"); stage.setscene(scene); stage.show(); } public static void main(string[] args) { launch(args); } }
Comments
Post a Comment