يتم إخفاء مربعات الحوار المشروطة في IE خلف IE إذا نقر المستخدم على جزء IE

StackOverflow https://stackoverflow.com/questions/73000

سؤال

لا بد لي من كتابة التطبيق الصغير الذي يعرض مربع حوار كلمة المرور.تكمن المشكلة في تعيين مربع الحوار ليكون دائمًا في المقدمة، ولكن عندما ينقر المستخدم على مربع حوار نافذة IE، يتم إخفاء مربع الحوار خلف نافذة IE مع ذلك.وبما أن الحوار مشروط ويحمل الجميع لا يتم تحديث جزء IE الخاص بمؤشرات ترابط IE ولا تزال نافذة الحوار مرسومة أعلى IE (ولكن لم يتم تحديثها).هذا السلوك يربك المستخدمين (هم يرى مربع حوار أعلى IE ولكن يبدو أنه قد تم تعليقه لأنه لم يتم تحديثه).

لذلك أحتاج إلى طريقة لإبقاء هذا الحوار فوق كل شيء.ولكن أي حل آخر لهذه المشكلة سيكون لطيفا.

إليك الكود:

        PassDialog dialog = new PassDialog(parent);
        /* do some non gui related initialization */
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setAlwaysOnTop(true);
        dialog.setVisible(true);

دقة:كما أشارshemnon، يجب أن أقوم بإنشاء نافذة بدلاً من (فارغة، إطار، تطبيق صغير) أصل مربع الحوار المشروط.كانت الطريقة الجيدة لتهيئة الوالدين هي:

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet);
هل كانت مفيدة؟

المحلول

ما هي الحجة التي تستخدمها للوالد؟

قد يكون حظك أفضل إذا استخدمت التطبيق الأصلي.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

سيؤدي استخدام getWindowAncestor إلى تخطي أصول التطبيق الصغير (سيقوم getRoot(component) بإرجاع التطبيقات الصغيرة).في بعض إصدارات Java على الأقل، كان هناك إطار يعادل نافذة IE.YMMV.

نصائح أخرى

أنشئ مؤشر ترابط في الخلفية يستدعي المقدمة في مربع الحوار كل ثانيتين.الكود الذي نستخدمه (آمل أن أكون حصلت على كل شيء):

class TestClass {
protected void toFrontTimer(JFrame frame) {
    try {
        bringToFrontTimer = new java.util.Timer();
        bringToFrontTask = new BringToFrontTask(frame);
        bringToFrontTimer.schedule( bringToFrontTask, 300, 300);
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

class BringToFrontTask extends TimerTask {
    private Frame frame;
    public BringToFrontTask(Frame frame) {
        this.frame = frame;
    }
    public void run()
    {
        if(count < 2) {
            frame.toFront();
        } else {
            cancel();
        }
        count ++;
    }
    private int count = 0;
}

public void cleanup() {
    if(bringToFrontTask != null) {
        bringToFrontTask.cancel();
        bringToFrontTask = null;
    }
    if(bringToFrontTimer != null) {
        bringToFrontTimer = null;
    }
}

java.util.Timer bringToFrontTimer = null;
java.util.TimerTask bringToFrontTask = null;
}

هذه لقطة في الظلام لأنني لست على دراية بالتطبيقات الصغيرة، ولكن يمكنك إلقاء نظرة على طريقة window.showModalDialog المضمنة في IE.إنه سهل الاستخدام إلى حد ما.ربما مزيج من هذا واقتراح نوح؟

قد تحاول تشغيل نموذج من JavaScript باستخدام تكامل JavaScript (انظر http://www.raditha.com/java/mayscript.php على سبيل المثال).

سيكون JavaScript الذي ستحتاجه شيئًا مثل:

function getPassword() {
  return prompt("Enter Password");
}

وستكون جافا:

password = jso.call("getPassword", new String[0]);

لسوء الحظ، هذا يعني التخلي عن كل أمل في الحصول على مظهر جميل.حظ سعيد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top