محاذاة مختلطة مع جافا سوينغ غولايوت
-
28-09-2019 - |
سؤال
أحاول بناء نافذة واجهة المستخدم الرسومية في طلبي. ما أحاول القيام به هو الحصول على نافذة ، مع بضع أزرار في الأعلى ، ومنطقة نصية كبيرة. شيء من هذا القبيل:
+--------------------------------------------------+
| [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 )
);