2017-11-13 3 views
1

So, wie ich Dinge einrichten, ist, dass unter bestimmten Bedingungen möchte ich einen Listener aktiv sein, und nachdem es ausgelöst hat, hör auf Änderungen zu hören. Vielleicht vermisse ich etwas, aber ich kann nicht herausfinden, wie man die removeListener() Funktion verwendet, oder ob das sogar der Weg ist, dies zu tun.So entfernen oder deaktivieren Sie einen Listener

Einige Code:

 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"); 
     } 
    }); 

Antwort

4

Was Sie in Ihrem Beispiel getan haben, ist, Sie haben einen Hörer in Ihrem addListener Methode definiert. Sie haben keinen Hinweis darauf außer dort! Eine Möglichkeit, dies zu beheben, ist einfach eine Variable dafür zu erstellen und sie irgendwo zu halten, so etwas wie

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); 
+0

Hey, danke! Ich hatte gedacht, dass ich so etwas machen musste, aber aus irgendeinem Grund konnte ich nicht herausfinden, wie ich einen Zuhörer auf diese Weise erschaffen konnte. – hego64

+3

Sie können weiterhin Lambda-Anweisungen verwenden. – Mordechai

+0

@MouseEvent Ja, Sie könnten immer noch Lambda-Anweisungen verwenden, aber ich dachte, dass dies klarer wäre, da es so aussah, als ob die Verwirrung von der Verwendung von Lambda-Statements kam, ohne ein klares Verständnis davon zu haben, was sie taten. – MMAdams

Verwandte Themen