java - registering changelistener to group of nodes in javafx -
java - registering changelistener to group of nodes in javafx -
is there way add together changelistener grouping of nodes next changes?
for example, can add together changelistener tabpane getting tabselectedproperty.
i want add together changelistener a grouping of buttons getting buttonactionedproperty! want old button , new button....
is there way this?
when compare tabs in tab pane collection of buttons, you're not comparing like. tab pane naturally has sense of tab selected; buttons generate events when pressed.
if want buttons have "selected" state, , want collection of grouped 1 selected, consider using togglebuttons instead. can set toggle buttons togglegroup , register listener toggle group's selectedtoggle property:
import javafx.application.application; import javafx.geometry.pos; import javafx.scene.scene; import javafx.scene.control.togglebutton; import javafx.scene.control.togglegroup; import javafx.scene.layout.hbox; import javafx.stage.stage; public class togglebuttondemo extends application { @override public void start(stage primarystage) { togglebutton apples = new togglebutton("apples"); togglebutton oranges = new togglebutton("oranges"); togglebutton pears = new togglebutton("pears"); togglegroup fruittogglegroup = new togglegroup(); fruittogglegroup.gettoggles().addall(apples, oranges, pears); fruittogglegroup.selectedtoggleproperty().addlistener((obs, oldtoggle, newtoggle) -> system.out.println("selected toggle changed "+oldtoggle+" "+newtoggle)); hbox root = new hbox(5, apples, oranges, pears); root.setalignment(pos.center); scene scene = new scene(root, 350, 75); primarystage.setscene(scene); primarystage.show(); } public static void main(string[] args) { launch(args); } } if want buttons, , don't have notion of 1 of them beingness selected (i find hard see utilize case this), can create objectproperty<button> store lastly button on action occurred. register event listener each button update property:
import javafx.application.application; import javafx.beans.property.objectproperty; import javafx.beans.property.simpleobjectproperty; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.geometry.pos; import javafx.scene.scene; import javafx.scene.control.button; import javafx.scene.layout.hbox; import javafx.stage.stage; public class lastactiontrackingdemo extends application { @override public void start(stage primarystage) { button apples = new button("apples"); button oranges = new button("oranges"); button pears = new button("pears"); objectproperty<button> lastactionedbutton = new simpleobjectproperty<>(); eventhandler<actionevent> buttonactionhandler = event -> lastactionedbutton.set((button) event.getsource()); apples.addeventhandler(actionevent.action, buttonactionhandler); oranges.addeventhandler(actionevent.action, buttonactionhandler); pears.addeventhandler(actionevent.action, buttonactionhandler); lastactionedbutton.addlistener((obs, oldbutton, newbutton) -> system.out.println("button changed "+oldbutton+" "+newbutton)); hbox root = new hbox(5, apples, oranges, pears); root.setalignment(pos.center); scene scene = new scene(root, 350, 75); primarystage.setscene(scene); primarystage.show(); } public static void main(string[] args) { launch(args); } } note there subtle different between appearance of 2 demos. first (with toggle buttons) has visual representation of button selected. sec not. in both cases can still set action listeners on buttons if need functionality. there (less subtle) difference in behavior: toggle buttons can "unselected"; if press same toggle button twice, selection goes null. doesn't happen buttons.
java javafx javafx-2 javafx-8
Comments
Post a Comment