2017-11-13 10 views
1

したがって、特定の条件で、リスナーをアクティブにして、放してからリスニングの変更をリッスンしないように設定する方法があります。たぶん私は何かが不足しているかもしれませんが、私は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"); 
     } 
    }); 

答えて

4

をやった何があなたのaddListenerメソッドでリスナーを定義しましたさ。あなたはそこにそれ以外の参照はありません!これを修正する1つの方法は、単純に変数を作成してどこかに保存することです。

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

ありがとう、ありがとう!私はそれが私がしなければならないようなものだと思っていましたが、何らかの理由で私はそのようにリスナーを作る方法を理解できませんでした。 – hego64

+3

ラムダステートメントは引き続き使用できます。 – Mordechai

+0

@MouseEventはい、あなたはまだラムダステートメントを使うことができますが、ラムダステートメントの使い方が分からず、ラムダステートメントを使っているように思えたので、これははっきりしていると思いました。 – MMAdams

関連する問題