所有代码均来自onToggleClick
方法应该转到initialize
控制器的方法。
现在,在第一个切换按钮上单击您设置的数据ToggleButton
s 并将它们放入组中,然后将侦听器设置为ToggleGroup
。
因此,此侦听器仅在第二次切换单击时执行,您再次设置数据,并且 - 更糟糕的是 - 您添加了一个额外的侦听器。
第三次单击时,这两个侦听器将被执行,并且您添加另一个侦听器...因此控制台上打印的“....apk”列表不断增长。
所有这些操作应该只发生一次,在所有节点创建之后:这个地方是initialize
控制器的方法。
如果你想拥有独立的ToggleButton
s,根本不把ToggleButton
变成一个ToggleGroup
,然后您可以收听selectedProperty分别的开关:
ToggleButton tb1 = new ToggleButton("ToggleButton1");
ToggleButton tb2 = new ToggleButton("ToggleButton2");
tb1.selectedProperty().addListener(((observable, oldValue, newValue) -> {
System.out.println(tb1.getText() + " changed from " + oldValue + " to " + newValue);
System.out.println("Taking a nap!");
}));
tb2.selectedProperty().addListener(((observable, oldValue, newValue) -> {
System.out.println(tb2.getText() + " changed from " +oldValue + " to " + newValue);
System.out.println("Working hard!");
}));
或者,您也可以使用onActionProperty.
for (int i = 0; i< 20; i++) {
ToggleButton tb = new ToggleButton("ToggleButton"+i);
tb.setUserData("UserData"+i);
tb.setOnAction(e -> {
System.out.println(tb.getText() + " - Selected: " + tb.isSelected()
+ "; UserData: " + tb.getUserData());
});
}