如何删除或停用侦听器

heg*_*o64 2 java javafx listener java-8

因此,我的设置方式是,在特定条件下,我希望侦听器处于活动状态,并且在触发后,停止侦听更改。也许我遗漏了一些东西,但我似乎无法弄清楚如何使用该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");
        }
    });
Run Code Online (Sandbox Code Playgroud)

MMA*_*ams 5

您在示例中所做的是在 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);
Run Code Online (Sandbox Code Playgroud)

  • 您仍然可以使用 lambda 语句。 (3认同)