所以,我设置的方式是,在特定条件下,我希望一个监听器处于活动状态,并且在它被触发后,停止监听更改。也许我错过了一些东西,但我似乎无法弄清楚如何使用removeListener()
函数,或者甚至是这样做的方法。
一些代码:
break1.setOnAction(e ->{
final String fieldValue = manage_money.getText();
int pp = Integer.parseInt(platinum_num.getText());
int gp = Integer.parseInt(gold_num.getText());
int sp = Integer.parseInt(silver_num.getText());
int cp = Integer.parseInt(copper_num.getText());
if (fieldValue != null && fieldValue.matches("\\d+")) {
int value = Integer.parseInt(manage_money.getText());
if (silver.isSelected()){
if (value <= sp){
try {
tooltip_inv.getChildren().addAll(select);
radio_money2.selectedToggleProperty().addListener(((observable, oldValue, newValue) -> {
if (newValue == copper){
silver_num.setText(Integer.toString(sp - value));
copper_num.setText(Integer.toString(cp + value * 10));
manage_money.clear();
tooltip_inv.getChildren().clear();
}
}));
} catch (IllegalArgumentException ex) {
}
}else{
manage_money.setText("ERR");
}
}
}else{
manage_money.setText("NaN");
}
});
答案 0 :(得分:4)
您在示例中所做的是您已在addListener方法中定义了一个侦听器。除了那里,你没有任何参考!解决这个问题的一种方法是简单地为它创建一个变量并将其保存在某个地方,比如
ChangeListener listener = new ChangeListener(){
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
// your code here
}
};
radio_money2.selectedToggleProperty().addListener(listener);
radio_money2.selectedToggleProperty().removeListener(listener);