سؤال

ما هو مدير تخطيط Java GUI الذي يستخدمه الجميع؟في الآونة الأخيرة، لقد تم استخدام MigLayout, ، والذي يحتوي على بعض عناصر التحكم القوية في المكونات.أردت فقط معرفة ما يستخدمه المطورون الآخرون بخلاف JDK القياسي.

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

المحلول

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

نصائح أخرى

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

يعد كل من MiG وFormLayout (JGoodies) ممتازين للتخطيط اليدوي (ويصبح كل التخطيط تقريبًا يدويًا في النهاية).أكبر نصيحتي هي تصميم طرق العرض الخاصة بك بحيث يمكنك حذف التخطيط بالكامل وإعادة تنفيذه دون التأثير على التطبيق الخاص بك (الفصل الجيد بين العرض ووحدة التحكم هو المفتاح هنا).

بالتأكيد قم بإلقاء نظرة على نهج JGoodie's PresentationModel لتنفيذ طرق العرض "الغبية".أستخدم هذه التقنية مع منشئ واجهة المستخدم الرسومية (أستخدم GroupLayout مع المكون الإضافي Jigloo GUI builder) لطرح نماذج أولية سريعة.بعد 3 أو 4 تكرارات، عادةً ما يخرج ذلك من النافذة ونقوم بإعادة التنفيذ باستخدام MiG أو FormLayout.

يحرر:منذ أن كتبت هذا، انتقلت إلى استخدام MiG لجميع تخطيطاتي، ولم أعد أستخدم أداة إنشاء واجهة المستخدم الرسومية - من السهل جدًا تخطيط الأشياء باستخدام MiG.

تم استخدام تطبيق Swing الأخير الذي عملت عليه تخطيط نماذج JGoodies.

انا استعمل ال GridBagLayout.يبدو أن الأمر يتطلب الكثير من التعليمات البرمجية، ولكنه يقدم تخطيطات جيدة المظهر للغاية.

أنا أيضا أحب الجمع تخطيط الحدود مع لوحات GridBagLayout للحصول على إمكانية تخصيص رائعة.

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

اعتدت أن أذهب إلى GridBagLayout للتحكم، ولكن منذ java1.6 سأستخدمه تخطيط المجموعة رأيت بعض.

هنا لقطة شاشة ونموذج التعليمات البرمجية لاستخدامها!.

نص بديل http://img145.imageshack.us/img145/7844/screenshot1dz8.png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }

أنا أستعمل DesignGridLayout بالنسبة لمعظم لوحاتي.

للوحات النادرة ذلك DesignGridLayout لا أستطيع التعامل بشكل كامل، فأنا أستخدم مزيجًا من Borderlayout و DesignGridLayout.

باستخدام DesigngridLayout، يمكنك ترميز تخطيطاتك يدويًا بأقل عدد من أسطر التعليمات البرمجية، والتي يسهل كتابتها وقراءتها:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

يتم تعريف كل صف من شبكة اللوحة بسطر واحد من التعليمات البرمجية.كما ترون، "رسم" اللوحة الخاصة بك هو أمر بسيط للغاية.

وبالإضافة إلى ذلك، أجد DesignGridLayout لديه بعض الميزات الفريدة (مثل "تغيير الحجم العمودي الذكي").

GridBagLayout قوي ولكنه بدائي تمامًا:الكود الذي يربط التخطيط مطول للغاية.تعمل مكتبة الأدوات المساعدة هذه (ملف جرة واحد فعليًا يحتوي على حوالي 10 فئات) على تبسيط الكثير من الأعمال: http://code.google.com/p/painless-gridbag/ المقتطف التالي مقتبس من الصفحة الرئيسية لذلك الموقع:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

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

يرى http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

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

تخطيط الربيع الذي تم تطويره لـ Mantissa gui builder والذي يعد جزءًا من netbeans.

لقد استخدمت تخطيط المجموعة أيضًا.مرة أخرى، إنه مدير تخطيط JDK قياسي اعتبارًا من Java6، ولكن يمكنك العثور على المكتبة منفصلة أيضًا.

لقد كنت دائمًا معجبًا كبيرًا بـ GridBagLayout.إنها تشبه جداول HTML كثيرًا لذا فهي بديهية لمبرمجي الويب.

لقد بدأت باستخدام العديد من التخطيطات المتداخلة، ثم انتقلت إلى GridBagLayout (وهو أمر محبط للغاية).منذ ذلك الحين جربت FormLayout (لكنني وجدت أنه غير مناسب لأي شيء سوى النماذج) واستقرت بشدة على TableLayout، وهو الأمر الذي أنا سعيد جدًا به بشكل عام.

منذ ذلك الحين اكتشفت MiGLayout وعلى الرغم من أنني لم أفعل أكثر من اللعب به، إلا أنه يبدو قادرًا جدًا، ويشبه تمامًا TableLayout وربما أكثر نظافة قليلاً.

الميزة الإضافية الكبيرة بالنسبة لي هي أن MiGLayout من المقرر أن يصبح جزءًا من JDK، لذلك أنوي استخدامه بشكل حصري تقريبًا عندما يحدث ذلك.

والشيء الآخر الذي يجب تذكره هو أنه بغض النظر عن برنامج LayoutManager ذو الوزن الثقيل الذي تختاره، فهناك دائمًا مكان لبعض مديري التخطيط الأبسط مثل GridLayout.لقد رأيت بعض الأشياء الفظيعة التي تم تنفيذها باستخدام GridBagLayout والتي كان من الممكن القيام بها بسهولة أكبر باستخدام مدير تخطيط أبسط.

أفضل تقليل التبعيات على libs التابعة لجهات خارجية، لذلك عادةً ما يكون BoxLayout لمربعات الحوار وGridBagLayout للتخطيطات "المعقدة".يعد GridBagLayout سهل الفهم بدرجة كافية، ولكن من الصعب قليلاً تكوينه.لقد كتبت لنفسي أداة لإنشاء التعليمات البرمجية من تخطيطات HTML (آمل أن يساعد ذلك الآخرين أيضًا):http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

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

أنا أستعمل تخطيط الحدود 90% من الوقت أثناء التعشيش BoxLayout و SpringLayout

أنا مبتدئ قليلاً في Java.

لقد جربت GridBagLayout، واستسلمت، ثم جربت BoxLayout، ثم استسلمت، ثم أنشأت خاصيتي تخطيط مخصص التي عملت.باستخدام GridBag وBox، وضعت أفضل تخميناتي وقررت محركات Layout أن تفعل شيئًا مختلفًا، دون أي طريقة واضحة لتصحيح الأخطاء.

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

بالطبع كان الأمر يتعلق فقط بمشروع منزلي، ولن يُسمح لك أبدًا بالقيام بذلك في العمل.

أستخدم GridBagLayout للنماذج مثل التخطيطات، واستخدم BorderLayout للتخطيطات البسيطة، وFlowLayout لعدد الرموز/الأزرار الأفقية التي تحتوي على بعض المسافات بينهما.يعد Netbeans أيضًا منشئًا جيدًا لواجهة المستخدم الرسومية يمكنه تجنب الكثير من أكواد التخطيط المملة لتوفير وقتك.

لقد بدأت باستخدام Swing مؤخرًا وأستخدم GridBagLayout.

لقد سئمت من كل هؤلاء مديري التخطيط الذين يحتاجون إلى الكثير من الإعداد، ولم يكونوا سهلين جدًا في القراءة أو مرهقين للقيام بذلك يدويًا، لذلك كتبت مدير التخطيط البسيط الخاص بي والذي يستخدم فكرة زاويتين ضوئيتين للحفاظ على كل مكون في مكانه.يمكنك إضافة المكون الخاص بك مثل هذا: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

الق نظرة هنا https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ؛) أنت مستجيب للتخطيط الصحيح بنفسك ، لأنها لا تفحص التداخل أو غيرها من عمليات الاختصاصية لتخطيطك.

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