لماذا تخطيط JFrame ليس الشخص الذي قمت بتعيينه؟
سؤال
إذا قمت بتعيين تخطيط على 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]
المحلول
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
هل العمل الحقيقي منك، ولكن في هذه الحالة جعل الأمر فقط الأشياء مربكة.