Tuesday, 15 January 2013

toggle - ToggleGroup.selectToggle bug? -



toggle - ToggleGroup.selectToggle bug? -

when calling togglegroup.selecttoggle(toggle toggle) radiobutton selected, radiobutton becomes unselected. sense bug, can confirm this?

toggle.fxml:

<?xml version="1.0" encoding="utf-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.paint.*?> <vbox prefheight="400.0" prefwidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.toggledemocontroller"> <children> <radiobutton mnemonicparsing="false" selected="true" text="first radiobutton"> <togglegroup> <togglegroup fx:id="mytogglegroup" /> </togglegroup> </radiobutton> <radiobutton mnemonicparsing="false" text="second radiobutton" togglegroup="$mytogglegroup" /> </children> </vbox>

toggledemocontroller:

package com.example; import javafx.fxml.fxml; import javafx.scene.control.togglegroup; public class toggledemocontroller { @fxml private togglegroup mytogglegroup; // implementing initializable interface no longer required according // http://docs.oracle.com/javafx/2/fxml_get_started/whats_new2.htm @suppresswarnings("unused") // called fxmlloader @fxml private void initialize() { // select selected toggle (that first radiobutton) again. // unselects first radiobutton, while 1 expect remain selected. mytogglegroup.selecttoggle(mytogglegroup.getselectedtoggle()); } }

code available @ http://codestefan.googlecode.com/svn/trunk/toggledemo

thanks hint!

update:

here's workaround figured out:

instead of

mytogglegroup.selecttoggle(mytogglegroup.getselectedtoggle());

use

toggle selectedtoggle = mytogglegroup.getselectedtoggle(); int selectedtoggleindex = mytogglegroup.gettoggles().indexof(selectedtoggle); mytogglegroup.gettoggles().get(selectedtoggleindex).setselected(true);

or in other words: instead of togglegroup.selecttoggle utilize toggle.setselected. guess 1 doesn't need index stuff in case, given index stored in database need select toggle on restoring application, adjusted case.

probably(!) workaround 2:

acess command behind toggle, e.g. radiobutton, , unselect 1 programmatically. see link between toggle , e.g. radiobutton behind it?.

yes. have found bug.

file against runtime project at: http://javafx-jira.kenai.com

make sure include link case provides reproducible sample code seems similar issues have been closed because developers unable reproduce issue.

here sample code replicates bug using java , no fxml - behaviour javafx 2.2.5 , java8b76 unusual , buggy imo:

import javafx.application.application; import static javafx.application.application.launch; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.scene.*; import javafx.scene.control.button; import javafx.scene.control.radiobutton; import javafx.scene.control.togglegroup; import javafx.scene.layout.vbox; import javafx.stage.stage; public class toggletest extends application { @override public void start(stage primarystage) { final togglegroup tg = new togglegroup(); radiobutton radio1 = new radiobutton("1"); radio1.setid("1"); radio1.settogglegroup(tg); radiobutton radio2 = new radiobutton("2"); radio2.setid("2"); radio2.settogglegroup(tg); tg.selecttoggle(radio1); // radio1.setselected(true); button button = new button("select 1"); button.setonaction(new eventhandler<actionevent>() { @override public void handle(actionevent t) { system.out.println("selected toggle before select: " + tg.getselectedtoggle() + " isselected? " + tg.getselectedtoggle().isselected()); tg.selecttoggle(tg.getselectedtoggle()); system.out.println("selected toggle after select: " + tg.getselectedtoggle() + " isselected? " + tg.getselectedtoggle().isselected()); } }); vbox layout = new vbox(10); layout.getchildren().addall(radio1, radio2, button); layout.setstyle("-fx-background-color: cornsilk; -fx-padding: 10;"); primarystage.setscene(new scene(layout)); primarystage.show(); } public static void main(string[] args) { launch(args); } }

program output after repeated button presses:

selected toggle before select: radiobutton[id=1, styleclass=radio-button] isselected? true selected toggle after select: radiobutton[id=1, styleclass=radio-button] isselected? false selected toggle before select: radiobutton[id=1, styleclass=radio-button] isselected? false selected toggle after select: radiobutton[id=1, styleclass=radio-button] isselected? false selected toggle before select: radiobutton[id=1, styleclass=radio-button] isselected? false selected toggle after select: radiobutton[id=1, styleclass=radio-button] isselected? false

toggle javafx-2

No comments:

Post a Comment