簡體   English   中英

如何阻止JavaFX Alert打開多個警報?

[英]How to stop JavaFX Alert from opening multiple alerts?

我相信我在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注釋的輸出:

哈哈
0:正確
計數器:1
輸入:是

它包含在其中(錯誤):

哈哈
哈哈
哈哈
0:正確
計數器:1
輸入:是
1:假
計數器:1
輸入:是
2:正確
計數器:1
輸入:是

我很困惑-為什么會發生這種情況,我該怎么辦才能解決?

順便說一下,目標是防止用戶選擇等於或早於當前日期的日期。

日期選擇器會創建一個彈出窗口,您的警報也是一個彈出窗口。

最可能的原因(我不確定,因為我不知道如何datePickerOnHiding() )是兩個彈出窗口都處於競爭狀態。 當您嘗試顯示警報時,您正在觸發datePickerOnHiding()因為它試圖再次隱藏。

如果要阻止用戶選擇無效值,則需要在datepicker彈出窗口已關閉(即隱藏) 之后觸發此方法。

Jai的回答很有幫助,但是我只是禁用了不想使用DayCells的日子。

看到:
http://o7planning.org/en/11085/javafx-datepicker-tutorial
javafx datepicker如何自定義

我用了第一個。

編輯: 我想出是造成重復的原因。

在關閉事件偵聽器中關閉“警報”對話框后,焦點將在場景中轉移。 對於焦點丟失的聽眾(他們在相同條件下開火),我有一個相似的(閱讀:相同)對話,因此,盡管起源不同,但對話似乎是相同的。 本質上,焦點一直與焦點偵聽器在節點之間來回擺動,從而導致針對一個錯誤的大量“警報”彈出窗口。

更改關閉監聽器Alert的AlertType后,我意識到自己的錯誤。

簡單修復-我做了一個externalRequest布爾值標志,如果externalRequest標志為true,我將focusListener事件處理程序更改為不執行任何操作。 像魅力一樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM