2016-09-25 4 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을 추가하면 밝혀집니다. 처음에는 "변경 내용을 잃어 버리면 행복하지 않습니다"라는 메시지가 나타나고 선택한 항목이 다시 변경되지만 다시 변경됩니다 사용자가 무엇을 클릭했는지 .... 두 번째로 그들은 취소하기를 좋아하지 않습니다. JavaFX App Thread의 예외, IndexOutOfBounds 예외 ... –

+0

그리고 도움이된다면 System.out을 추가했습니다. 플래그 상태를 확인하는 중 .... 예 : Combobox가 X .... 사용자 클릭 Y .... 핸들 실행, 선택한 값 Y, 플래그 true ......... 사용자가 누름 그들은 변화를 잃어서 행복하지 않다. .... 핸들은 X의 선택된 값을 가지고 다시 실행된다. (모든 좋은 지금까지는), 그런 다음 핸들이 곧바로 실행될 때 Y로 다시 뒤집는다. , 그런 대화 상자가 다시 나타납니다 .... 그 정보가 도움이되는지 나는 모른다 ...핸들과 같은은 실제로 핸들 값이 중간 값으로 변경되는 것을 좋아하지 않으며, 실제로 사용자 변경을 고수하고 싶어합니다 !! –

+0

@VinNorman 위의 내용은 'ActionEvent'를 수신하는 대신 listener를 value 속성으로 직접 등록합니다. –

관련 문제