>

JavaFX API 내에서 버그가 발생했다고 생각하지만 확실하지 않습니다. 따라서 다음 스 니펫은 정상적으로 작동하지만 alert.show(); 를 추가하면  또는 alert.showAndWait(); 이 프로그램은 세 가지 경고 대화 상자를 엽니 다. 코드는 다음과 같습니다.

   private void datePickerOnHiding(JFXDatePicker datePicker, JFXCheckBox chkBox) { 
        int counter = 0;
        boolean entered = false;
        if (datePicker.getValue().isBefore(LocalDate.now()) ||datePicker.getValue().isEqual(LocalDate.now())) {
            if ((eventHiddenCounter % 2) == 0) {
                System.out.println("HAHA");//Testing
                txtfMessage.setVisible(true);
                txtfMessage.setText("Please select a future date.");
                Alert alert = new Alert(AlertType.WARNING, "Please select a future date.");
                alert.showAndWait();
                datePicker.setValue(null);
                counter ++;
                entered = true;
            }
        } else {
            txtfMessage.setVisible(false);
            chkBox.setSelected(true);
        }
        //Testing
        System.out.println("" + eventHiddenCounter + ": " + ((eventHiddenCounter % 2) == 0));
        System.out.println("COUNTER: " + counter + "\nENTERED: " + entered);
        entered = false;
        eventHiddenCounter ++;
}

alert.showAndWait 의 출력은 다음과 같습니다.  코멘트 :

HAHA
0: true
COUNTER: 1
ENTERED: true

포함 된 버그 (버그) :

HAHA
HAHA
HAHA
0: true
COUNTER: 1
ENTERED: true
1: false
COUNTER: 1
ENTERED: true
2: true
COUNTER: 1
ENTERED: true

나는 매우 당황합니다. 왜 이런 일이 발생하며 어떻게 해결할 수 있습니까?

목표는 사용자가 현재 날짜와 같거나 그 이전의 날짜를 선택하지 못하도록하는 것입니다.

  • 답변 # 1

    날짜 선택 도구가 팝업을 생성하고 알림도 팝업 창입니다.

    가장 가능성이 높은 이유 (어떻게 datePickerOnHiding() 를 모르기 때문에 확신 할 수 없다  두 개의 팝업에 경쟁 조건이 있다는 것입니다. 경고를 표시하려고하면 datePickerOnHiding() 가 트리거됩니다.  다시 숨기려고하기 때문에.

    사용자가 유효하지 않은 값을 선택하지 못하게하려면 날짜 선택기 팝업이 이미 닫힌 후 (즉, 숨겨 짐)이 방법을실행해야합니다.

  • 답변 # 2

    Jai의 답변은 다음과 같습니다. 도움이되었지만 DayCells를 사용하고 싶지 않은 날을 막았습니다.

    참조 :
    http://o7planning.org/en/11085/javafx-datepicker-tutorial
    javafx datepicker 사용자 정의 방법

    첫 번째를 사용했습니다.

    편집 :반복의 원인을 파악했습니다.

    닫기 이벤트 리스너에서 Alert 대화 상자가 닫힌 후 장면에서 포커스가 이동합니다. 포커스 잃어버린 청취자 (동일한 조건에서 발생)에 대한 비슷한 (읽기 : 동일한) 대화가 있으므로 대화의 기원이 다르더라도 대화가 동일한 것처럼 보입니다. 기본적으로 포커스 리스너를 사용하여 포커스가 노드와 계속 진동하면서 한 번의 오류로 수많은 경고 팝업이 발생합니다.

    닫는 리스너 경고의 AlertType을 변경 한 후 실수를 깨달았습니다.

    간단한 수정- externalRequest 를 만들었습니다  부울 플래그, 나는 focusListener 를 변경   externalRequest 경우 이벤트 핸들러는 아무것도하지 않습니다.  깃발은 사실이었다. 매력처럼 일했다.

  • 이전 linux - 매개 변수를 사용한 BASH 쉘 스크립팅
  • 다음 php - 2 배열을 어떻게 그룹화 할 수 있습니까?