سؤال

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

+--------------------------------------------------+
| [button1] [button2]                    [button3] |
| +----------------------------------------------+ |
| | text area                                    | |
| |                                              | |
| |                                              | |
| |                                              | |
| +----------------------------------------------+ |
+--------------------------------------------------+

أنا هناك تقريبًا ، باستخدام Grouplayout:

  layout.setHorizontalGroup(
    layout.createParallelGroup()
      .addGroup(layout.createSequentialGroup()
        .addComponent(button1)
        .addComponent(button2))
        .addComponent(closeWindow))
      .addComponent(textarea1)
  );

  layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addComponent(button3))
      .addComponent(textarea)
  );

المشكلة هي أن هذا ينتهي بزر button3 محاذاة إلى اليسار ، مع الاثنين الآخرين. لا يمكنني معرفة كيف يمكنني تحديد المحاذاة على زر واحد فقط. يمكنني القيام grouplayout.alignment.trailing على شريط الأزرار بأكمله ، ولكن هذا يضرب جميع الأزرار الثلاثة ، وهو أيضًا ليس صحيحًا تمامًا.

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

ماذا ينقصني؟

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

المحلول

أضف فجوة في مجموعتك المتسلسلة. ترك مجموعتك الأفقية كما هو:

layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(button3))
      .addComponent(textarea)
  );

تعمل الفجوة مع تلك المعايير كـ "ربيع" ، وتشغل جميع المساحة المتاحة.

نصائح أخرى

حاول إضافة:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)

بعد الزر الثاني. سوف يتسبب Max_value في توسيع الفجوة بقدر ما هو ضروري.

تريد استخدام AddPreferredGap () وهو متاح فقط على مجموعات متتابعة. يمنحك الرمز أدناه التصميم المطلوب.

    layout.setHorizontalGroup(
            layout.createParallelGroup()
                    .addGroup( layout.createSequentialGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );
    layout.setVerticalGroup(
            layout.createSequentialGroup()
                    .addGroup( layout.createParallelGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top