تنظيم العناصر بواسطة GridPane
التنظيم بواسطة ( GridPane ) من تسميته يتضح لنا أنه عبارة عن جدول نستطيع من خِلاله تنظيم العناصر في المشهَد. تعلّمنا كيفية إنشاء عناصر و إضافتها للمشهد و اليوم سوف نتعلم كيفية إستخدام GridPane لتنظيم العناصر في المشهد. و نحن عندما نقول عناصر يُقصَد بها ( الأزرار و النصوص و الحقول....الخ) أي العناصر التفاعلية. التي يتفاعل معها المستخدم مثل أزرار و مربعات نصوص و ComboBox...الخ.
سوف نستخدم الحزمة GridPane التي تتبع إلى layout و يتبعون للحزمة Scene و الحزمة TextField ايضاً. تابعة للحزمة Scene نستطيع من خلاله كتابة مربع نص و نستخدم الحزمة button لإنشاء زر. سوف نتعلم كيفية إنشاء عنصرين تفاعليين و هما مربع نص و زر و إضافتهم إلى الـ GridPane و إضافة GridPane للمشهد ثم إضافة المشهد للمقطع النهائي. الكلاس GridPane يتم إستخدامه لإنشاء حاوية تترتب الأشياء التي نضيفها فيها كجدول وهمي يتألف هذا الجدول من أسطر و أعمدة متساوية الحجم.
مثال 1
package mhamad;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Mhamad extends Application {
public void start(Stage stage) {
TextField txt=new TextField();
Button b=new Button("click");
GridPane p=new GridPane();
p.setHgap(10);
p.setVgap(10);
p.setMinSize(400, 400);
p.setAlignment(Pos.CENTER);
p.add(b, 0, 0);
p.add(txt, 0, 1);
Scene s=new Scene(p);
stage.setScene(s);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
قبل الدخول للبدء بكتابة البرنامج قمنا بإستدعاء الحزم التي نحتاجها و منها حزمة geometry.Pos هي المسؤولة. عن محاذاة GridPane سواء للمنتصف أو يمين أو يسار. و الحزمة layout.GridPane هي المسؤولة عن تنظيم العناصر التفاعلية و هي زبدة هذا الدرس. و باقي الحزم التي تم إستدعاءها تعرّفنا عليها في الدروس السابقة من بداية دروس JavaFX. ثم دخلنا للدالة start و بدأنا بكتابة البرنامج و في البداية قمنا بإنشاء كلاس المربع النصي TextField. ثم أنشأنا كلاس الزر Button و من ثم قمنا بإنشاء كلاس الـ GridPane و أخذ الكائن p.
و بعدها قمنا بتحديد الحواشي الأفقية عن طريق setHgap و الحواشي العمودية عن طريق setVgap و أخذو الحاشي 10 للأفقي و العمودي. و قُمنا بتحديد حجم GridPane و هو 400 للعرض و 400 للطول بواسطة الدالة setMinSize. و قمنا بمحاذاة GridPane إلى منتصف الشاشة عن طريق setAlignment و القيمة التي أخذها CENTER أي في منتصف الشاشة. و أضفنا العناصر إلى GridPane بواسطة الدالة add للعمود الأول 0, 0 و العمود الثاني 0, 1 و اضفناهم للمشهد. و أضفنا المشهد إلى النموذج stage و أظهرنا الواجهة.
عند تشغيل الكود السابق سوف نحصل على النتيجة التالية
كما نلاحظ أنه تم وضع الزر في الخلية 0 و المربع النصي في الخلية 1 كما طلبنا منه فإذا قمنا بتغير مكان الخلايا عكسياً بالأمر p.add(txt, 1, 0) سوف تكون النتيجة.
نلاحظ أنه وضعنا الزر في الخلية 0,0 و وضعنا المربع النصي في الخلية 1,0 أي العمود التالي.
إنشاء نموذج تسجيل دخول بواسطة GridPane
سوف نستخدم نفس الحزم التي إستخدمناها سابقاً, إضافةً لحزم جديدة و هي:
- الكلاس Button لإنشاء الزر.
- الكلاس PasswordField لإنشاء تكست خاص بإدخال كلمة السر.
- الكلاس TextField لأنشاء مربع نصي.
- الكلاس GridPane الذي عن طريقه يمكننا تنظيم العناصر التفاعلية التي نقوم بإنشاءها.
- الكلاس text.Text التي تستخدم لإنشاء النصوص.
- الكلاس Stage.
- الكلاس geometry.Pos تُستخدَم لمحاذاة الـ GridPane (في الوسط, اليمين, اليسار).
مثال 2
package mhamad;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Mhamad extends Application {
public void start(Stage stage) {
Text t1=new Text("Email");
Text t2=new Text("Password");
TextField txt1=new TextField();
PasswordField txt2=new PasswordField();
Button b=new Button("Send");
GridPane p=new GridPane();
p.setMinSize(300, 300);
p.setAlignment(Pos.CENTER);
p.setHgap(5);
p.setVgap(5);
p.add(t1, 0, 0);
p.add(txt1, 1, 0);
p.add(t2, 0, 1);
p.add(txt2, 1, 1);
p.add(b, 0, 2);
Scene s=new Scene(p);
stage.setScene(s);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
لقد إستخدمنا في هذا المثال حزم عديدة و هي: حزمة geometry.Pos تُستخدَم لمحاذاة GridPane سواء للوسط أو اليمين أو اليسار. و حزمة الزر Button و الحزمة PasswordField هي حزمة خاصة بإنشاء تكست خاص بإدخال كلمة مرور. و حزمة TextField الخاصة بالمربع النصي و حزمة GridPane الخاصة بتنظيم العناصر. و دخلنا للدالة start و بدأنا بكتابة الأكواد و في بدايتها أنشأنا ليبل t1 من أجل إدخال الإيميل و أنشأنا ليبل ثاني t2 من أجل حقل كلمة السر.
و أنشأنا كلاس مربع نصي بإسم txt1 عن طريق الكلاس TextField و كلاس كلمة المرور. txt2 عن طريق الكلاس PasswordField ثم أنشأنا كلاس الزر Button من أجل إرسال البيانات. بعد ذلك قمنا بإنشاء GridPane من أجل تنظيم العناصر و تحديد حجم GridPane عن طريق الدالة setMinSize و كانت. بطول 300 و عرض 300 ووضعنا محاذاتها في المنتصف بواسطة setAlignment. ثم قمنا بتحديد المسافة بين العنصرين من اليمين و الأعلى و الأسفل عن طريق setHgap و المحاذاة العمودية بين العناصر عن طريق setVgap.
وقمنا بإضافة عنوان الكائن t1 و إضافة المربع النصي في العمود المجاور و بعدها اضفنا الباسورد t2 و اضفناها للعمود الثاني. ثم اضفنا الزر في الأسفل بالصف الثالث و رقمه 2 أي الخلية 2 ثم أنشأنا المشهد و إضافته إلى الفورم و إظهار الفورم.
عند تشغيل هذا الكود سوف تكون نتيجته هي.