2016-09-25 7 views
0

私は、ビューを変更するComboBoxを持つプログラムを持っています。保存されていない編集があり、ユーザーがComboBoxを変更すると、ダイアログが表示され、進行してもよければダイアログが表示され、はいの場合はビューが変更されます...ただし、いいえと言えば、ComboBoxを元の値。JavaFX ComboBoxの値が変更されましたループ

私は、問題に関連するコードを簡潔にするようにポストしようとしています...警告ダイアログコードは他の場所で(私のviewControllerクラス内で)発生し、現在のグループは私の全プログラムが見ることができるクラスに保存されます(globalFields )。ここで

はコードであり、そのような問題として:だから彼らは変更を失うことは満足していない場合

@FXML 
private void handleClassesComboBox(ActionEvent event) { 

    if (classesComboBox.getSelectionModel().getSelectedItem() != null) { 

     if (viewController.ifUnsavedChangesUserHappyToLose()) { 
      globalFields.setCurrentGroup(classesComboBox.getSelectionModel().getSelectedItem()); 
      setView(); 
     } else{ 
      classesComboBox.setValue(globalFields.getCurrentGroup()); 
     } 

} 

、私は前の選択に戻したいが、もちろん、これは、このようにループを引き起こし変更のためにhandleClassesComboBoxメソッドが再度トリガされます。

私は確信していますが、何度も何度もループを繰り返すことなく元に戻すためのロジックを実行することはできません。

また、ここに私の最初の質問があるので、もし私が何かを見逃したり、明白なことを説明したら、私に教えてください!

ありがとうございます!

ヴィン

答えて

0

あなただけのフラグを設定できます。

private boolean checkUserChange = true ; 

、その後

@FXML 
private void handleClassesComboBox(ActionEvent event) { 

    if (classesComboBox.getSelectionModel().getSelectedItem() != null) { 

     if (checkUserChange && viewController.ifUnsavedChangesUserHappyToLose()) { 
      globalFields.setCurrentGroup(classesComboBox.getSelectionModel().getSelectedItem()); 
      setView(); 
     } else{ 
      checkUserChange = false ; 
      classesComboBox.setValue(globalFields.getCurrentGroup()); 
      checkUserChange = true ; 
     } 

    } 

} 
+0

これは残念ながら私のために動作しません。それはまだ繰り返し回る。選択されたアイテムがループしていることを確認するためにSystem.outを追加すると、明らかに...明らかに2回実行されるように見えます。ユーザーがクリックしたものに.... 2回目にキャンセルを押すと、JavaFX App Threadの例外、IndexOutOfBounds例外が発生します。 –

+0

これが役に立ちましたら、System.outを追加しましたフラグの状態を確認する.... ....例: コンボボックスがX上にありました....ユーザーがYをクリック...ハンドルが実行され、選択されたYの値でフラグが真...... ユーザーがいいえ彼らは変更を失うことに満足していません....ハンドルは、Xの選択値を使用して再度実行されますが、今度はフラグがtrueに戻ります、そのようなダイアログが再び表示されます.... その情報が役立つかどうかわかりません...ハンドルのようなは本当にその値が中央のハンドルを変更されているのを好まない、それは本当にユーザーの変更に固執したい! –

+0

@VinNorman上記は、 'ActionEvent'をリッスンするのではなく、リスナーをvalueプロパティで直接登録します。 –

関連する問題