سؤال

إذا قمت بتعيين تخطيط على JFrame مع setLayout ثم استرجعه getLayout ثم أحصل على مختلف LayoutManager. وبعد ما الذي يجري هنا؟؟

public class Lay {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                java.awt.Container container =
                    new javax.swing.JFrame();
                    //new javax.swing.JPanel();
                java.awt.LayoutManager layout =
                    new java.awt.GridLayout();
                container.setLayout(layout);
                layout = container.getLayout();
                System.err.println(layout);
            }
        });
    }
}

اعطي

java.awt.BorderLayout[hgap=0,vgap=0]

ولكن إذا استبدلت JFrame مع JPanel انا حصلت

java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
هل كانت مفيدة؟

المحلول

من جافا API ل JFrame:

public void setLayout(LayoutManager manager)

يحدد LayoutManager. وبعد تجاوزت إلى توجيه المكالمة بشكل مشروط إلى contentPane. وبعد تشير إلى RootPaneContainer للمزيد من المعلومات.

ومن RootPaneContainer صفحة:

تعمل هذه الواجهة كعلامة لبناة Swing Gui التي تحتاج إلى علاج مكونات مثل JFrame, ، التي تحتوي على واحد JRootPane, ، خصيصا. للراحة JFrame, JDialog, JWindow, JApplet و JInternalFrame, ، بشكل افتراضي، إلى الأمام، بشكل افتراضي، جميع المكالمات إلى add, remove و setLayout الأساليب، إلى contentPane. وبعد هذا يعني أنه يمكنك الاتصال:

rootPaneContainer.add(component);

بدلا من:

rootPaneContainer.getContentPane().add(component);

أ JRootPane هو عنصر مشترك يستخدمه جميع مكونات الوزن الثقيل لتظهر وكأنها نافذة نظام التشغيل الأصلي. يعالج شريط القوائم، وثيق / تقليل الأزرار / تعظيم الأزرار، إلخ. JFrame يحاول إخفاء حقيقة ذلك JRootPane هل العمل الحقيقي منك، ولكن في هذه الحالة جعل الأمر فقط الأشياء مربكة.

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