شرح الكلاس VBox في javafx

شرح الكلاس  VBox

الكلاس VBox يستخدم لإنشاء حاوية ترتب الأشياء التي نضيفها فيها بشكل عامودي.

إفتراضياً, الأشياء التي نضيفها في كائن الـVBox تظهر في الأعلى من جهة اليسار.
و طبعاً تستطيع تحديد من أي جهة تريد أن تظهر الأشياء التي يتم إضافتها فيه.

حجم كائن الـ VBox يمكن تحديده, و يمكن تحديد ما إذا كانت الأشياء بداخله سيتغير حجمها مع تغيّر حجمه أم أن حجمها ثابت لا يتغير.

حجم الفراغ بين الأشياء التي نضيفها فيه يمكن تحديده من جميع الإتجاهات.


بناء الكلاس VBox

              public class VBox
              extends Pane
            

كونستركتورات الكلاس VBox

الجدول التالي يحتوي على كونستركتورات الكلاس VBox.

الكونستركتور مع تعريفه
VBox() ينشئ كائن من الكلاس VBox يمثل حاوية فارغة ترتب الأشياء التي نضيفها فيها بشكل عامودي.
VBox(double spacing) ينشئ كائن من الكلاس VBox يمثل حاوية فارغة ترتب الأشياء التي نضيفها فيها بشكل عامودي مع تحديد المسافة الفارغة بين الأشياء التي نضيفها فيها.
مكان الباراميتر spacing نمرر رقم يمثل حجم المسافة الفارغة التي سيتم وضعها بين الأشياء التي نضيفها فيها.
VBox(Node... children) ينشئ كائن من الكلاس VBox يمثل حاوية ترتب الأشياء التي نضيفها فيها بشكل عامودي مع تحديد الأشياء التي نريد وضعها فيها.
مكان الباراميتر children نمرر الأشياء التي نريد وضعها فيها مع وضع فاصلة بين كل شيئين.
VBox(double spacing, Node... children) ينشئ كائن من الكلاس VBox يمثل حاوية ترتب الأشياء التي نضيفها فيها بشكل عامودي مع تحديد الأشياء التي نريد وضعها فيها و المسافة الفارغة بينهم.
مكان الباراميتر spacing نمرر رقم يمثل حجم المسافة الفارغة التي سيتم وضعها بين الأشياء التي نضيفها فيها.
مكان الباراميتر children نمرر الأشياء التي نريد وضعها فيها مع وضع فاصلة بين كل شيئين.

دوال الكلاس VBox

الجدول التالي يحتوي على دوال الكلاس VBox الأكثر إستخداماً.

الدالة مع تعريفها
public void setSpacing(int value) تستخدم لتحديد حجم الفراغ بين كل شيئين يتم إضافتهما في كائن الـ VBox الذي قام باستدعائها.
مكان الباراميتر value نمرر رقم يمثل حجم الفراغ بالـ Pixel.
public final void setAlignment(Pos value) تستخدم لتحديد مكان ظهور الأشياء التي سيتم وضعها في كائن الـ VBox الذي قام باستدعائها.
مكان الباراميتر value نمرر إحدى ثوابت الكلاس Pos:
  • TOP_LEFT: يظهر المحتوى في الأعلى ناحية اليسار.

  • TOP_CENTER: يظهر المحتوى في الأعلى و في الوسط.

  • TOP_RIGHT: يظهر المحتوى في الأعلى ناحية اليمين.

  • CENTER_LEFT: يظهر المحتوى في الوسط ناحية اليسار.

  • CENTER: يظهر المحتوى في الوسط تماماً.

  • CENTER_RIGHT: يظهر في الوسط ناحية اليمين.

  • BOTTOM_LEFT: يظهر المحتوى في الأسفل ناحية اليسار.

  • BOTTOM_CENTER: يظهر المحتوى في الأسفل و في الوسط.

  • BOTTOM_RIGHT: يظهر المحتوى في الأسفل ناحية اليمين.

public final void setFillWidth(boolean value) تستخدم لتحديد ما إذا كانت الأشياء التي سنضيفها في كائن الـ VBox الذي قام باستدعائها ستتأثر بعرضه أم لا.
مكان الباراميتر value نمرر القيمة true في حال أردنا جعل عرض الأشياء يتغير بشكل تلقائي نسبة لطول الـ VBox.
public static void setMargin(Node child, Insets value) تستخدم لإضافة فراغ حول أي شيء موضوع بداخل VBox.
مكان الباراميتر child نمرر الشيء الذي نريد إضافة فراغ حوله.
مكان الباراميتر value نمرر كائن من الكلاس Insets نحدد فيه حجم الفراغ الذي سيتم إضافته للشيء من الجهات الأربعة ( فوقه, يمينه, تحته, يساره ).
public static void setVgrow(Node child, Priority value) تستخدم لتحديد ما إذا كان طول الشيء الموضوع بداخل VBox سيتأثر بطوله أم أن طوله سيظل ثابت.
مكان الباراميتر child نمرر الشيء الذي نريد تحديد ما إن كان طوله سيتأثر بطول الـ VBox أم لا.
مكان الباراميتر value نمرر إحدى ثوابت الكلاس Priority التي تحدد ذلك:
  • ALWAYS: لجعل طول الشيء يظهر على أكبر مساحة متوفرة في كائن الـ VBox.

  • NEVER: لجعل طول الشيء ثابت لا يتأُثر أبدً بحجم كائن الـ VBox.

  • SOMETIMES: لجعل طول الشيء يظهر على أكبر مساحة متوفرة في كائن الـ VBox في حال لم يكن هناك أي شيء آخر قد تم تعيينه ليظهر على أكبر مساحة متوفرة فيه.

public final void setStyle(String value) تستخدم لتعديل تصميم كائن الـ VBox الذي قام بإستدعائها.
مكان الباراميتر value يمكنك تمرير إسم و قيمة أي خاصية تريد تعديلها في كائن الـ VBox بأسلوب لغة CSS لإظهاره بالشكل الذي تريده.
public ObservableList<Node> getChildren() ترجع كائن نوعه ObservableList يمثل محتوى كائن الـ VBox الذي قام بإستدعائها مما يجعلك قادراً على إضافة كائنات جديدة أو حذف كائنات موجودة فيه.

أمثلة شاملة في الكلاس  VBox

 طريقة إنشاء كائن من الكلاس VBox

المثال التالي يعلمك طريقة إنشاء كائن من الكلاس VBox و وضعه كـ Root Node.

مثال

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");
                Button button3 = new Button("Button 3");

                // root في الكائن button3 و button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);
                root.getChildren().add(button3);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

طريقة إنشاء كائن من الكلاس VBox


 طريقة إضافة مسافة فارغة بين الأشياء التي نضيفها في VBox في JavaFX

المثال التالي يعلمك طريقة إضافة مسافة فارغة بين الأشياء التي نضيفها في VBox.
بالإضافة إلى عرض محتوى الـ VBox في الوسط.

مثال

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.geometry.Pos;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // root هنا قمنا بإضافة مسافة فارغة بمقدار 10 بيكسل بين أي شيئين يتم إضافتهما في الكائن
                root.setSpacing(10);

                // يظهر في وسطه root هنا قمنا بجعل محتوى الكائن
                root.setAlignment(Pos.CENTER);

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");
                Button button3 = new Button("Button 3");

                // root في الكائن button3 و button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);
                root.getChildren().add(button3);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

طريقة إضافة مسافة فارغة بين الأشياء التي نضيفها في VBox في JavaFX

ببطئ قم بتكبير حجم النافذة و تصغيرها بواسطة الفأرة لتفهم أكثر كيف تم ترتيب العناصر.



طريقة  تتغير أحجام الأشياء التي نضعها في VBox في JavaFX

المثال التالي يوضح كيف تتغير أحجام الأشياء التي نضعها في VBox كلما تغير حجمه و كيف أن المسافات الفارغة لا تتأثر.

مثال

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.geometry.Pos;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // root هنا قمنا بإضافة مسافة فارغة بمقدار 10 بيكسل بين أي شيئين يتم إضافتهما في الكائن
                root.setSpacing(10);

                // يظهر في وسطه root هنا قمنا بجعل محتوى الكائن
                root.setAlignment(Pos.CENTER);

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");
                Button button3 = new Button("Button 3");

                // root و الذي سيتغير بشكل تلقائي في حال تغيير حجم الكائن root هنا قمنا بتحديد الحجم المفضل للأشياء التي سنضيفها في الكائن
                button1.setPrefSize(150, 50);
                button2.setPrefSize(150, 50);
                button3.setPrefSize(150, 50);

                // root في الكائن button3 و button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);
                root.getChildren().add(button3);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

كيف تتغير أحجام الأشياء التي نضعها في VBox في JavaFX

ببطئ قم بتكبير حجم النافذة و تصغيرها بواسطة الفأرة لتفهم أكثر كيف ستتغير أحجام الأشياء التي وضعناها في الـ VBox.

لاحظ أنه عندما يصبح هناك مساحة متوفرة لعرض الأشياء بالحجم الذي نفضله سيصبح حجمهم ثابت و سيظهروا في وسط الـ VBox.



 طريقة إضافة هامش من جميع الإتجاهات لأي شيء تم وضعه في VBox في JavaFX

المثال التالي يعلمك طريقة إضافة هامش من جميع الإتجاهات لأي شيء تم وضعه في VBox.

مثال

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.geometry.Insets;
                import javafx.geometry.Pos;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // يظهر في وسطه root هنا قمنا بجعل محتوى الكائن
                root.setAlignment(Pos.CENTER);

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");
                Button button3 = new Button("Button 3");

                // root و الذي سيتغير بشكل تلقائي في حال تغيير حجم الكائن root هنا قمنا بتحديد الحجم المفضل للأشياء التي سنضيفها في الكائن
                button1.setPrefSize(150, 50);
                button2.setPrefSize(150, 50);
                button3.setPrefSize(150, 50);

                // VBox هنا قمنا بإضافة هامش لكل شيء سنضيفه في الكائن
                VBox.setMargin(button1, new Insets(10, 10, 10, 10));   // من جميع الجهات button1 هنا أضفنا هامش بمقدار 10 بيكسل حول الكائن
                VBox.setMargin(button2, new Insets(0, 10, 0, 10));     // من اليمين و اليسار فقط button2 هنا أضفنا هامش بمقدار 10 بيكسل حول الكائن
                VBox.setMargin(button3, new Insets(10, 10, 10, 10));   // من جميع الجهات button3 هنا أضفنا هامش بمقدار 10 بيكسل حول الكائن

                // root في الكائن button3 و button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);
                root.getChildren().add(button3);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

طريقة إضافة هامش من جميع الإتجاهات لأي شيء تم وضعه في VBox في JavaFX

ببطئ قم بتكبير حجم النافذة و تصغيرها بواسطة الفأرة لتفهم أكثر كيف ستتغير أحجام الأشياء التي وضعناها في الـ VBox.

لاحظ أنه عندما يصبح هناك مساحة متوفرة لعرض الأشياء بالحجم الذي نفضله سيصبح حجمهم ثابت و سيظهروا دائماً في وسط الـ VBox.



 طريقة جعل محتوى ال VBox يظهر على كل المساحة المتوفرة فيه في JavaFX

المثال التالي يعلمك طريقة جعل محتوى الـ VBox يظهر على كل المساحة المتوفرة.

المثال الأول

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.geometry.Insets;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;
                import javafx.scene.layout.Priority;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");

                // و هو كل المساحة المتوفرة بالطول و العرض button1 هنا قمنا بتحديد الحجم الأقصى المفضل للكائن
                button1.setMaxWidth(Double.MAX_VALUE);
                button2.setMaxWidth(Double.MAX_VALUE);

                // و هو كل المساحة المتوفرة بالطول و العرض button2 هنا قمنا بتحديد الحجم الأقصى المفضل للكائن
                button1.setMaxHeight(Double.MAX_VALUE);
                button2.setMaxHeight(Double.MAX_VALUE);

                // الذي سيتم وضعهما بداخله VBox يكبران لأقصى حدود ممكنة نسبة لحجم كائن الـ button2 و button1 هنا جعلنا طول الكائنين
                VBox.setVgrow(button1, Priority.ALWAYS);
                VBox.setVgrow(button2, Priority.ALWAYS);

                // VBox و الذي سيظهر عند إضافتهما في button2 و button1 هنا قمنا بإضافة هامش حول الكائنين
                VBox.setMargin(button1, new Insets(10, 10, 5, 10));
                VBox.setMargin(button2, new Insets(5, 10, 10, 10));

                // root في الكائن button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

طريقة جعل محتوى ال VBox يظهر على كل المساحة المتوفرة فيه في JavaFX

ببطئ قم بتكبير حجم النافذة و تصغيرها بواسطة الفأرة لتفهم أكثر كيف تم ترتيب العناصر و كيف أنهم ظهروا في كامل عرض الـ VBox.



هنا قمنا بإعادة المثال الأول مع تعديل السطر رقم 31 فقط.

المثال الثاني

Main.java
                import javafx.application.Application;
                import javafx.scene.Scene;
                import javafx.stage.Stage;
                import javafx.collections.ObservableList;
                import javafx.geometry.Insets;
                import javafx.scene.control.Button;
                import javafx.scene.layout.VBox;
                import javafx.scene.layout.Priority;

                public class Main extends Application {

                @Override
                public void start(Stage stage) {

                // في النافذة Root Node و الذي ننوي جعله الـ VBox هنا قمنا بإنشاء كائن من الكلاس
                VBox root = new VBox();

                // root هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في الكائن
                Button button1 = new Button("Button 1");
                Button button2 = new Button("Button 2");

                // و هو كل المساحة المتوفرة بالطول و العرض button1 هنا قمنا بتحديد الحجم الأقصى المفضل للكائن
                button1.setMaxWidth(Double.MAX_VALUE);
                button2.setMaxWidth(Double.MAX_VALUE);

                // و هو كل المساحة المتوفرة بالطول و العرض button2 هنا قمنا بتحديد الحجم الأقصى المفضل للكائن
                button1.setMaxHeight(Double.MAX_VALUE);
                button2.setMaxHeight(Double.MAX_VALUE);

                // الذي سيتم وضعه بداخله VBox ثابت و لا يتأثر أبداً بحجم كائن الـ button1 هنا جعلنا طول الكائن
                HBox.setHgrow(button1, Priority.NEVER);

                // الذي سيتم وضعه بداخله VBox يكبر لأقصى حدود ممكنة نسبة لحجم كائن الـ button2 هنا جعلنا طول الكائن
                HBox.setHgrow(button2, Priority.ALWAYS);

                // VBox و الذي سيظهر عند إضافتهما في button2 و button1 هنا قمنا بإضافة هامش حول الكائنين
                VBox.setMargin(button1, new Insets(10, 10, 5, 10));
                VBox.setMargin(button2, new Insets(5, 10, 10, 10));

                // root و الذي بدوره سيضيفهم أيضاً في الكائن list في الكائن button2 و button1 هنا قمنا بإضافة الكائنات
                root.getChildren().add(button1);
                root.getChildren().add(button2);

                // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
                Scene scene = new Scene(root, 300, 150);

                // هنا وضعنا عنوان للنافذة
                stage.setTitle("JavaFX VBox");

                // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
                stage.setScene(scene);

                // هنا قمنا بإظهار النافذة
                stage.show();

                }

                // هنا قمنا بتشغيل التطبيق
                public static void main(String[] args) {
                launch(args);
                }

                }
              

ستظهر لك النافذة التالية عند التشغيل.

طريقة تحديد مساحة كل عنصر في ال VBox في JavaFX

ببطئ قم بتكبير حجم النافذة و تصغيرها بواسطة الفأرة لتفهم أكثر كيف تم ترتيب العناصر و كيف أن الكائن button1 سيحتل فقط المساحة التي يحتاجها مهما كان حجم كائن الـ VBox. بينما الكائن button2 سيظهر على كل المساحة المتبقية.

كورس تعلم javaFX من البداية الى الاحتراف