使JavaFX radiobutton事件仅触发一次
我在Oracle演示页面上有单选按钮和事件侦听器。 它可以工作,它可以将数据保存到数据库中,但问题是,它的发射次数与组中的无线电发射次数相同。 我希望它只被切换一次,这样我就可以只处理一次数据 以下是相关的代码注释我有许多广播组,所以我使用地图:使JavaFX radiobutton事件仅触发一次,javafx,toggle,radio,Javafx,Toggle,Radio,我在Oracle演示页面上有单选按钮和事件侦听器。 它可以工作,它可以将数据保存到数据库中,但问题是,它的发射次数与组中的无线电发射次数相同。 我希望它只被切换一次,这样我就可以只处理一次数据 以下是相关的代码注释我有许多广播组,所以我使用地图: private Map<Integer, RadioButton> Radios = new HashMap<>(); private Map<Integer, ToggleGroup> RadioGroups =
private Map<Integer, RadioButton> Radios = new HashMap<>();
private Map<Integer, ToggleGroup> RadioGroups = new HashMap<>();
(...)
DrawRadio (int group, int id, String label) {
if (RadioGroups.get(group) == null) {
RadioGroups.put(group, new ToggleGroup());
}
(...)
Radios.put(id, new RadioButton(label));
Radios.get(id).setToggleGroup(RadioGroups.get(group));
Radios.get(id).setUserData(ans_id);
(...)
RadioGroups.get(group).selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (RG.getSelectedToggle().equals(new_toggle)) {
System.out.println ("Called with ov:" + ov + ", old_tgl:" + old_toggle.toString() + " and new_tgl: " + new_toggle.toString());
}
}
}
}
我只想要一次,所以:
我把它修好了。正如我之前所说,问题正如乌鲁克指出的那样——每次调用函数时,我都创建了事件侦听器 修复方法是添加检查是否第一次生成放射组:
DrawRadio (int group, int id, String label) {
boolean AddListener = false;
if (RadioGroups.get(group) == null) {
AddListener = true;
RadioGroups.put(group, new ToggleGroup());
}
(...)
if (AddListener == true) {
RadioGroups.get(group).selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (RG.getSelectedToggle().equals(new_toggle)) {
System.out.println ("Called with ov:" + ov + ", old_tgl:" + old_toggle.toString() + " and new_tgl: " + new_toggle.toString());
}
}
}
}
}
我试图复制您的问题,但无法复制。我想看看您在代码中做了什么。你能为此创建一个吗?调试你的组。getgroup。。。密码您可能不止一次将同一个侦听器添加到同一属性。是的,这就是问题所在-每次我调用DrawRadio时,我都添加了事件侦听器!
Called with ov:ReadOnlyObjectProperty [value: RadioButton@3814fb6f[styleClass=radio-button]'b'], old_tgl:RadioButton@5b417598[styleClass=radio-button]'a' and new_tgl: RadioButton@3814fb6f[styleClass=radio-button]'b'
DrawRadio (int group, int id, String label) {
boolean AddListener = false;
if (RadioGroups.get(group) == null) {
AddListener = true;
RadioGroups.put(group, new ToggleGroup());
}
(...)
if (AddListener == true) {
RadioGroups.get(group).selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (RG.getSelectedToggle().equals(new_toggle)) {
System.out.println ("Called with ov:" + ov + ", old_tgl:" + old_toggle.toString() + " and new_tgl: " + new_toggle.toString());
}
}
}
}
}