سؤال

لدي إطار صغير حيث أسأل المستخدم وكلمة المرور. سيتم فتح هذا الإطار النقر فوق زر في نافذة رئيسية.

ثم لدي زران: موافق وإلغاء.

عندما أضغط على زر "إلغاء"، أحتاج إلى إغلاق هذا الإطار دون الخروج من التطبيق.

كيف أقوم بذلك؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام إما الإطار. hide () أو frame.dispose (). أود أيضا أن أوصي بالنظر إلى Jdialog أو Joptionpane

تصحيح: إخفاء () مهملة. يجب أن تستخدم (خطأ) بدلا من ذلك

نصائح أخرى

ربما تكون الطريقة الأنظف هي مجرد تغيير SetDefaultCloseoperation من Exit_On_Close إلى Dispose_on_Close:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

يمكنك استدعاء مثبت (FALSE) على الإطار.

قد ترغب أيضا في الاتصال SetDefaultCloseoperation على الإطار يمر في hide_on_close (معلومات هنا: http://java.sun.com/javase/6/docs/api/javax/swing/jframe.html#STDEFAULTCLOSECLOSEOPERITERY٪28INT٪29.). سيمنع ذلك التطبيق من الذهاب بعيدا إذا كان المستخدم يضرب "X" على JFrame لإغلاقه.

يستخدم this.dispose(); في طريقة مستمع العمل عند نجاح اسم المستخدم / كلمة المرور. على سبيل المثال:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

إذا كنت تستخدم الفئات الداخلية للتعامل مع الأحداث، فاستبدل فقط "this.dispose ()" باستخدام super_class_name.theis.dispose ()؛

تأكد من أنك لا:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

لا تطلق طريقة مثبتة موارد الذاكرة ويجب استخدامها فقط عند استخدام النموذج مرة أخرى.

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

قم بإجراء وظيفة في الفئة الخارجية حيث تقوم بتنفيذ JFrame (تحتاج إلى إغلاق الضغط على زر إلغاء الضغط).
يكتب this.setVisible(false); في تنفيذ تلك الوظيفة.
أخيرا استدعاء هذه الوظيفة في ActionListener التنفيذ عندما تريد إغلاقه.

يمكنك القيام بذلك بطرق عديدة ولكن هذه الطرق هي الأكثر قابلة للاستخدام
1. اكتب this.setVisible(false) في الداخل نفذت ActionListener
أو
2. اكتب this.dispose() داخل تنفيذها ActionListenerوبعد ارجوا ان يساعدك هذا.

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