2016-08-01 21 views
5

Şu anda JavaFX kullanarak bir iletişim kutusu oluşturuyorum. Dialog o kendini çok iyi çalışıyor ama şimdi bir metin alanı doldurmayı unuttuğunda kullanıcıyı uyarır bir giriş doğrulama eklemek çalışıyorum. Ve soru şu şekilde geliyor: Diyaloğun Sonuç Dönüştürücü içinde kapanmasını önlemek mümkün mü? Şunun gibi:JavaFX iletişim kutusunun kapatılmasını engelle

ButtonType buttonTypeOk = new ButtonType("Okay", ButtonData.OK_DONE); 
dialog.getDialogPane().getButtonTypes().add(buttonTypeOk); 

dialog.setResultConverter((ButtonType param) -> { 

    if (valid()) { 
     return ... 
    } else { 
     Alert alert = new Alert(Alert.AlertType.WARNING); 
     alert.setHeaderText("Pleas fill all fields!"); 
     alert.showAndWait(); 
     //prevent dialog from closing 
    } 

}); 

bir hata resault dönüştürücü içine atıldı ama bu bu sorunu çözmek için iyi bir yol gibi görünüyor yoksa diyalog yakın dosn't fark ettim.

Sorunu bu şekilde çözmek mümkün değilse, bu düğmeyi this post'da açıklandığı gibi devre dışı bırakabilirim. Ancak düğmeyi etkin tutmayı ve bir mesaj göstermeyi tercih ederim.

Teşekkürler! aslında Javadoc açıklanmıştır bir iletişim veri doğrulama yönetmek gerekiyor Nasıl

cevap

12

, ben alıntı:

Diyalog Doğrulama/Intercepting Düğme İşlemleri Bazı durumlarda

o arzu edilir iletişim kutusunun bir kısmı dahili olarak tutarlı hale gelinceye kadar iletişim kutusunun kapanmasını önleyin (örn. iletişim kutusunun içinde formu tüm alanlarda geçerli bir durumda olur). Bunu yapmak için, iletişim kutusu API'sının kullanıcıları, DialogPane.lookupButton(ButtonType) yöntemine aşina olmalıdır. (Zaten düğme türleri listesinde ayarlanmış) bir ButtonType geçen, kullanıcılar tipik tip Button olan Düğümü döndürdü olacaktır (ancak DialogPane.createButton(ButtonType) yöntem geçersiz kılınan olmuşsa bu bağlıdır). Bu düğmeyle, kullanıcılar düğmenin olağan olay işleme başlamadan önce çağrılan olan bir olay filtresi ekleyebilir ve bu nedenle kullanıcıları olayı tüketerek olay işlemeyi engelleyebilir. İşte basitleştirilmiş örnek:

final Button btOk = (Button) dlg.getDialogPane().lookupButton(ButtonType.OK); 
btOk.addEventFilter(
    ActionEvent.ACTION, 
    event -> { 
     // Check whether some conditions are fulfilled 
     if (!validateAndStore()) { 
      // The conditions are not fulfilled so we consume the event 
      // to prevent the dialog to close 
      event.consume(); 
     } 
    } 
); 

Başka bir deyişle, iletişim kapatılması önleyecek şartlar yerine getirilmemesi durumunda olayı tüketmek için düğmeye bir olay filtresi eklemek gerekiyor.

fazla detay

+0

validateAndStore() yöntemi nedir here? Ne yapması gerekiyor? –

+1

@EdvBeq bu yöntem mevcut değil, sadece fikri göstermek için. Bu yalnızca, giriş verilerini doğrulayacak ve doğrulama başarılı olursa potansiyel olarak başka bir şey yapacak özel bir yöntemdir. Eğer doğru dönerse, diyalog kapanacaktır, aksi halde diyalog açık kalacaktır. –

İlgili konular