شرح - javafx ماهي




كيفية إنشاء نافذة مشروطة في JavaFX 2.1 (2)

لا أستطيع معرفة كيفية إنشاء نافذة مشروطة في JavaFX. بشكل أساسي لديّ منتقي ملفات وأريد أن أسأل المستخدم سؤالاً عند اختيار ملف. أحتاج إلى هذه المعلومات لتحليل الملف ، لذلك يحتاج التنفيذ إلى انتظار الإجابة.

لقد رأيت هذا السؤال ولكني لم أتمكن من معرفة كيفية تنفيذ هذا السلوك.


في رأيي هذا ليس حلا جيدا ، لأن نافذة الوالدين هي كل الوقت نشط.
على سبيل المثال إذا كنت ترغب في فتح نافذة كملجوز بعد النقر فوق الزر ...

private void clickShow(ActionEvent event) {
    Stage stage = new Stage();
    Parent root = FXMLLoader.load(
        YourClassController.class.getResource("YourClass.fxml"));
    stage.setScene(new Scene(root));
    stage.setTitle("My modal window");
    stage.initModality(Modality.WINDOW_MODAL);
    stage.initOwner(
        ((Node)event.getSource()).getScene().getWindow() );
    stage.show();
}

الآن نافذة جديدة لديك هي مشروط حقيقي - الأصل هو كتلة. كما يمكنك استخدامها

Modality.APPLICATION_MODAL

في ما يلي ارتباط إلى حل قمت بإنشائه مسبقًا لمربعات حوار مشروطة في JavaFX 2.1 يقوم الحل بإنشاء مرحلة مشروطة أعلى المرحلة الحالية واتخاذ إجراء على نتائج الحوار عبر معالجات الأحداث لعناصر تحكم الحوار.

تحديث

يستخدم الحل المرتبط مسبقًا نهجًا مؤخرًا لمعالج الأحداث لاتخاذ إجراء بعد رفض مربع حوار. كان هذا النهج صالحًا لتطبيقات ما قبل JavaFX 2.2. بالنسبة إلى JavaFX 8+ ، لا توجد حاجة إلى أدوات الحدث ، بدلاً من ذلك ، استخدم طريقة showAndWait() الجديدة الخاصة بالمرحلة. فمثلا:

Stage dialog = new Stage();

// populate dialog with controls.
...

dialog.initOwner(parentStage);
dialog.initModality(Modality.APPLICATION_MODAL); 
dialog.showAndWait();

// process result of dialog operation. 
... 

لاحظ أنه لكي تعمل الأشياء كما هو متوقع ، من المهم تهيئة مالك المرحلة وتهيئة طريقة المرحلة إلى WINDOW_MODAL أو APPLICATION_MODAL .

هناك بعض حوارات UI القياسية عالية الجودة في JavaFX 8 و ControlsFX ، إذا كانت تناسب متطلباتك ، أنصحك باستخدام تلك بدلاً من تطويرها. تشتمل أيضًا initOwner JavaFX Dialog و Alert على initOwner و initModality و showAndWait ، بحيث يمكنك تعيين الطريقة لها كما يحلو لك (لاحظ أن مربعات الحوار المضمن بشكل افتراضي هي تطبيقات مشروطة).