شرح الأشكال ثنائية الأبعاد في JavaFX

شرح الاشكال ثنائية الأبعاد

في هذا الدرس ستتعلم كيف تتعامل مع الكلاسات الجاهزة في الحزمة javafx.scene.shape لرسم أشكال ثنائية الأبعاد ( 2D Shapes ).
كل كلاس موجود في هذه الحزمة تم تصميمه لإعطائك شكل معين يمكنك رسمه في النافذة.

من الأشياء التي يمكنك رسمها في النافذة بواسطة هذه الحزمة:

  • خط ( Line) متسقيم أو منحني.

  • مستطيل ( Rectangle).

  • دائرة ( Circle).

  • شكل بيضاوي ( Polygon).

  • تحويل الصور التي نوعها SVG لشكل ثنائي الأبعاد.



معلومة أشكال ثنائية الأبعاد

الحزمة javafx.scene.shape فيها كلاس إسمه Shape يعتبر الكلاس الأساسي لأي كلاس يمثل شكل معين.
و بالتالي فإن أي شكل نريد الحصول عليه سيكون عبارة عن كائن من كلاس يرث منه و لهذا ستجد أن أغلب الكلاسات التي ستتعامل معها في هذه الحزمة تملك دوال مشتركة.



مبدأ الرسم

مبدأ الرسم في جافا هو نفسه مبدأ الرسم الذي تعلمته في مادة الرياضيات حيث أن كل نقطة تريد تحديد مكانها في النافذة يجب أن تحدد لها قيمتين هما X و Y.

  • X: نقصد منها أين سيتم وضع النقطة بالنسبة للنافذة أفقياً.

  • Y: نقصد منها أين سيتم وضع النقطة بالنسبة للنافذة عامودياً.

في النهاية, تحديد قيمة X و Y معاً يحدد مكان وجود النقطة في النافذة.

الكلاسات التي تستخدم لرسم أشكال ثنائية الأبعاد في javafx


 طريقة رسم دائرة في الكلاس Circle

الكلاس Circle يستخدم للحصول على دائرة.
الدائرة بدورها تتألف من نقطة أساسية يقال لها المركز ( Center ) و القطر ( Diameter ) و الذي بدوره يساوي radius * 2.

  • لتحديد نقطة وجود مركز الدائرة في النافذة نستخدم الدالتين setCenterX() و setCenterY().

  • لتحديد نصف حجم قطر الدائرة نستخدم الدالة setRadius().


المثال التالي يعلمك طريقة رسم دائرة, إعطاؤها لون و إضافتها في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الدائرة التي نريد إضافتها في النافذة Circle هنا قمنا بإنشاء كائن من الكلاس
        Circle circle = new Circle();

        // في النافذة circle هنا قمنا بتحديد النقطة التي سيظهر عندها الكائن
        circle.setCenterX(200);
        circle.setCenterY(125);

        // circle الكائن ( Radius ) هنا قمنا بتحديد حجم نصف  قطر
        circle.setRadius(80);

        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود rectangle هنا قمنا بإعطاء الكائن لون
        circle.setFill(Color.CADETBLUE);
        circle.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Circle في javafx

 طريقة رسم دائرة غير مكتملة في الكلاس Arc

الكلاس Arc يستخدم للحصول على شكل بيضاوي أو دائري غير مكتمل, بمعنى أنه يظهر فيه جزء ناقص.
الشكل البيضاوي بدوره يتألف من نقطة أساسية يقال لها المركز ( Center ), قطر عامودي و قطر أفقي.

  • لتحديد نقطة وجود مركز الدائرة في النافذة نستخدم الدالتين setCenterX() و setCenterY().

  • لتحديد نصف حجم قطر الدائرة العامودي نستخدم الدالة setRadiusY().

  • لتحديد نصف حجم قطر الدائرة الأفقي نستخدم الدالة setRadiusX().

  • لتحديد حجم الجزء الذي سيتم إظهاره من الشكل نستخدم الدالة setLength().

  • لتحديد من أي درجة سيتم البدء بإخفاء الشكل من عندها نستخدم الدالة setStartAngle().

  • لتحديد الطريقة التي سيتم فيها إخفاء جزء من الشكل نستخدم الدالة setType().


المثال التالي يعلمك طريقة رسم دائرة غير مكتملة, إعطاؤها لون و إضافتها في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الدائرة التي نريد إضافتها في النافذة Arc هنا قمنا بإنشاء كائن من الكلاس
        Arc arc = new Arc();
        
        // في النافذة arc هنا قمنا بتحديد النقطة التي سيظهر عندها الكائن
        arc.setCenterX(200);
        arc.setCenterY(125);

        // arc هنا قمنا بتحديد حجم نصف القطر الأفقي و نصف القطر العامودي للكائن
        // جعلنا القطرين متساويين حتى يظهر الكائن كدائرة عندما يتم عرضه في النافذة
        arc.setRadiusX(80);
        arc.setRadiusY(80);
        
        // هنا قمنا بتحديد كم درجة نريد أن نظهر من الدائرة
        // هذا يعني أن 60 درجة من الدائرة لن يتم رسمها - لأن الدائرة تتألف من 360 درجة - و هذا يعادل ربع الدائرة
        arc.setLength(300);

        // هنا حددنا أنه إبتداءاً من زاوية 30 درجة سيتم رسم الـ 300 درجة
        arc.setStartAngle(30);

        // هنا قمنا بتحديد أن الجزء الذي لن يتم رسمه سيكون كالقوس
        arc.setType(ArcType.ROUND);
        
        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود rectangle هنا قمنا بإعطاء الكائن لون
        arc.setFill(Color.CADETBLUE);
        arc.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Arc في javafx

 مثال حول الكلاس Path و الكلاس PathElement

في حال كنت تريد بناء شكل معقد لا يشبه أي شكل من الأشكل التي تعلمت طريقة رسمها من الأمثلة السابقة, يمكنك إستخدام الكلاس Path و الكلاسات التي ترث من الكلاس PathElement لرسم الشكل الذي تريده.

الآن, الشكل الواحد الذي تريد رسمه يمكنك تقسميه لعدة أجزاء مما يجعلك قادر على إعطاء لون خاص لكل جزء في هذا الشكل و إضافة مؤثرات عليه.
كل جزء تنوي وضعه في الشكل سيكون عبارة عن كائن من الكلاس Path. و أول نقطة تضعها في كل جزء ستكون عبارة عن كائن من الكلاس MoveTo.

أي خط تنوي وضعه بعد وضع النقطة الأولى, سيكن عبارة عن كائن من إحدى الكلاسات التالية:

  • LineTo: في حال كنت تنوي رسم خط مستقيم.

  • HLineTo: في حال كنت تنوي رسم خط مستقيم أفقي.

  • VLineTo: في حال كنت تنوي رسم خط مستقيم عامودي.

  • QuadCurveTo: في حال كنت تنوي رسم منحنى رباعي.

  • CubicCurveTo: في حال كنت تنوي رسم منحنى مكعب.

  • ArcTo: في حال كنت تنوي رسم خط بيضاوي أو دائري.


المثال التالي يعلمك طريقة رسم أي شكل تريد و تلوينه, و من ثم إضافته في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

		// و الذي سيمثل الجزء الأعلى الذي ننوي رسمه في النافذة Path هنا قمنا بإنشاء كائن من الكلاس
		// يمثل النقطة الأولى في هذا الجزء MoveTo بعدها قمنا بإنشاء كائن من الكلاس
		// يمثل النقطة التي سيقف عندها المنحنى الرباعي و النقطة التي سينجذب إليها في هذا الجزء QuadCurveTo بعدها قمنا بإنشاء كائن من الكلاس
        Path path1 = new Path();
        MoveTo move1 = new MoveTo(150, 100);
        QuadCurveTo quadCurve = new QuadCurveTo();
        quadCurve.setX(250);
        quadCurve.setY(100);
        quadCurve.setControlX(200);
        quadCurve.setControlY(0);
        
		// أبيض و جعلنا حدوده أكثر سمكاً path1 هنا جعلنا لون داخل الكائن
        path1.setFill(Color.WHITE);
        path1.setStrokeWidth(3);

        // حتى نربطهم مع بعض path1 في الكائن quadCurve و move1 هنا قمنا بإضافة الكائنين
        path1.getElements().addAll(move1, quadCurve);

		// و الذي سيمثل الجزء الأسفل الذي ننوي رسمه في النافذة Path هنا قمنا بإنشاء كائن من الكلاس
		// يمثل النقطة الأولى في هذا الجزء MoveTo بعدها قمنا بإنشاء كائن من الكلاس
		// يمثل النقاط التي سيقف عندها كل خط مستقيم في هذا الجزء LineTo بعدها قمنا بإنشاء ثلاث كائنات من الكلاس
        Path path2 = new Path();
        MoveTo move2 = new MoveTo(150, 100);
        LineTo line1 = new LineTo(250, 100);
        LineTo line2 = new LineTo(200, 220);
        LineTo line3 = new LineTo(150, 100);

        // حتى نربطهم مع بعض path2 في الكائن line3 ,line2 line1 و move2 هنا قمنا بإضافة الكائنان
        path2.getElements().addAll(move2, line1, line2, line3);
        
		// بني فاتح و جعلنا حدوده أكثر سمكاً path2 هنا جعلنا لون داخل الكائن
        path2.setFill(Color.GOLDENROD);
        path2.setStrokeWidth(3);

        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();
        
        // root في الكائن svgPath هنا قمنا بإضافة الكائن
        root.getChildren().addAll(path1, path2);

        // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
        Scene scene = new Scene(root, 400, 270);
        
		// أخضر, أي كأننا قمنا بتغيير لون خلفية النافذة scene هنا قمنا بجعل لون الكائن
        scene.setFill(Color.PALEGREEN);

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

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

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

    }

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

}
		

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

مثال حول الكلاس Path و الكلاسات التي ترث من الكلاس PathElement في javafx

 طريقة رسم شكل بيضاوي في الكلاس Ellipse

الكلاس Ellipse يستخدم للحصول على شكل بيضاوي.
شكل بيضاوي بدوره يتألف من نقطة أساسية يقال لها المركز ( Center ), قطر عامودي و قطر أفقي.

  • لتحديد نقطة وجود مركز الدائرة في النافذة نستخدم الدالتين setCenterX() و setCenterY().

  • لتحديد نصف حجم قطر الدائرة العامودي نستخدم الدالة setRadiusY().

  • لتحديد نصف حجم قطر الدائرة الأفقي نستخدم الدالة setRadiusX().


المثال التالي يعلمك طريقة رسم شكل بيضاوي, إعطاؤه لون و إضافته في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الدائرة التي نريد إضافتها في النافذة Ellipse هنا قمنا بإنشاء كائن من الكلاس
        Ellipse ellipse = new Ellipse();

        // في النافذة ellipse هنا قمنا بتحديد النقطة التي سيظهر عندها الكائن
        ellipse.setCenterX(200);
        ellipse.setCenterY(125);

        // بالطول ellipse الكائن ( Radius ) هنا قمنا بتحديد حجم نصف  قطر
        ellipse.setRadiusY(60);

        // بالعرض ellipse الكائن ( Radius ) هنا قمنا بتحديد حجم نصف  قطر
        ellipse.setRadiusX(110);

        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود ellipse هنا قمنا بإعطاء الكائن لون
        ellipse.setFill(Color.CADETBLUE);
        ellipse.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Ellipse في javafx

 طريقة رسم خط مستقيم في الكلاس line

الكلاس Line يستخدم للحصول على خط مستقيم يمكن عرضه بشكل عامودي, أفقي و مائل أيضاً.
الخط بدوره يتألف من نقطتين أساسيتين, نقطة البداية و نقطة النهاية.

  • لتحديد نقطة بداية الخط نستخدم الدالتين setStartX() و setStartY().

  • لتحديد نقطة بداية الخط نستخدم الدالتين setEndX() و setEndY().


المثال التالي يعلمك طريقة رسم خط مستقيم, إعطاؤه لون و إضافته في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الخط المستقيم الذي نريد إضافته في النافذة Line هنا قمنا بإنشاء كائن من الكلاس
        Line line = new Line();
        
        // في النافذة line هنا قمنا بتحديد موقع نقطة بداية الخط الذي يمثله الكائن
        line.setStartX(50);
        line.setStartY(50);

        // في النافذة line هنا قمنا بتحديد مكان نقطة نهاية الخط الذي يمثله الكائن
        line.setEndX(350);
        line.setEndY(200);
        
		// إلى اللون الأحمر line هنا قمنا بإعطاء الكائن لون
        line.setStroke(Color.RED);
        
        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Line في javafx

 طريقة رسم شكل مغلق في الكلاس Polygon 

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


المثال التالي يعلمك طريقة رسم مثلث, إعطاؤه لون و إضافته في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الشكل المغلق - في حالتنا نقصد المثلث - الذي نريد إضافته في النافذة Polygon هنا قمنا بإنشاء كائن من الكلاس
        Polygon polygon = new Polygon();

        // في النافذة و التي ستمثل الشكل النهائي عندما يتم وصلها polygon هنا قمنا بتمرير مصفوفة أرقام تمثل مكان كل نقطة سنضعها للكائن
        // للنقطة y للنقطة. القيمة الثاني تمثل قيمة الـ x كل سطر في هذه المصفوفة يمثل نقطة واحدة في الشكل الذي نريد رسمه, القيمة الأولى تمثل قيمة الـ
        polygon.getPoints().addAll(
            100.0, 200.0,             // هذه نقطة البداية التي وضعناها في الأسفل ناحية اليسار
            200.0, 50.0,              // هذه النقطة الثانية التي وضعناه في الأعلى و في وسط النافذة
            300.0, 200.0              // هذه النقطة الأخيرة التي وضعناها في الأسفل ناحية اليسار
        );

        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود polygon هنا قمنا بتغيير لون الكائن
        polygon.setFill(Color.CADETBLUE);
        polygon.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Polygon في javafx

 طريقة رسم شكل غير مغلق بواسطة الكلاس Polyline 

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


المثال التالي يعلمك طريقة رسم شكل يشبه المثلث, و إضافته في النافذة مع الإشارة إلى أننا تعمدنا عدم وضع لون له حتى تلاحظ أنه لم يتم وصل أول و آخر نقطة بشكل تلقائي.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polyline;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الشكل الغير مغلق الذي نريد إضافته في النافذة Polyline هنا قمنا بإنشاء كائن من الكلاس
        Polyline polyline = new Polyline();

        // في النافذة و التي ستمثل الشكل النهائي عندما يتم وصلها polyline هنا قمنا بتمرير مصفوفة أرقام تمثل مكان كل نقطة سنضعها للكائن
        // للنقطة y للنقطة. القيمة الثاني تمثل قيمة الـ x كل سطر في هذه المصفوفة يمثل نقطة واحدة في الشكل الذي نريد رسمه, القيمة الأولى تمثل قيمة الـ
        polyline.getPoints().addAll(
            100.0, 200.0,             // هذه نقطة البداية التي وضعناها في الأسفل ناحية اليسار
            200.0, 50.0,              // هذه النقطة الثانية التي وضعناه في الأعلى و في وسط النافذة
            300.0, 200.0              // هذه النقطة الأخيرة التي وضعناها في الأسفل ناحية اليسار
        );

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Polyline في javafx

 طريقة رسم منحنى رباعي في الكلاس QuadCurve 

الكلاس QuadCurve يستخدم للحصول على منحنى رباعي و الذي يشبه الخط الغير مستقيم أو الذي فيه إنحناء واحد.
الخط بدوره يتألف من ثلاث نقاط: نقطة البداية, نقطة النهاية و النقطة التي سينحني الخط باتجاهها.

  • لتحديد موقع نقطة بداية الخط نستخدم الدالتين setStartX() و setStartY().

  • لتحديد موقع نقطة بداية الخط نستخدم الدالتين setEndX() و setEndY().

  • لتحديد موقع النقطة التي سينحني الخط باتجاهها نستخدم الدالتين setControlX() و setControlY().


المثال التالي يعلمك طريقة رسم منحنى رباعي, إعطاؤه لون و إضافته في النافذة.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.QuadCurve;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الخط المستقيم الذي نريد إضافته في النافذة QuadCurve هنا قمنا بإنشاء كائن من الكلاس
        QuadCurve quadCurve = new QuadCurve();
        
        // في النافذة quadCurve هنا قمنا بتحديد موقع نقطة بداية الخط الذي يمثله الكائن
        quadCurve.setStartX(100);
        quadCurve.setStartY(180);

        // في النافذة quadCurve هنا قمنا بتحديد موقع نقطة نهاية الخط الذي يمثله الكائن
        quadCurve.setEndX(300);
        quadCurve.setEndY(180);
        
        // في النافذة quadCurve هنا قمنا بتحديد موقع النقطة التي سينجذب إليها الخط الذي يمثله الكائن
        quadCurve.setControlX(130); 
        quadCurve.setControlY(-50);  
      
        // أحمر و جعلنا داخله شفافاً quadCurve هنا قمنا بجعل لون حدود الكائن
        quadCurve.setStroke(Color.RED);
        quadCurve.setFill(Color.TRANSPARENT);
        
        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس QuadCurve في javafx

 طريقة رسم مستطيل في الكلاس Rectangle

يستخدم للحصول على مستطيل أو مربع على حسب الطول و العرض الذي تحدده له.

  • لتحديد النقطة التي سيظهر عندها المستطيل في النافذة نستخدم الدالتين setX() و setY().

  • و لتحديد طول و عرض المستطيل نستخدم الدالتين setWidth() و setHeight(), و هذا الأمر ستراه في المثال الأول.

  • لجعل زوايا المستطيل مستديرة الشكل نستخدم الدالتين setArcWidth() و setArcHeight() لتحديد درجة إنحناء الزوايا, و هذا الأمر ستراه في المثال الثاني.


المثال التالي يعلمك طريقة رسم مستطيل, إعطاؤه لون, إضافته في النافذة.

المثال الأول

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل المستطيل الذي نريد إضافته في النافذة Rectangle هنا قمنا بإنشاء كائن من الكلاس
        Rectangle rectangle = new Rectangle();

        // في النافذة rectangle هنا قمنا بتحديد النقطة التي سيظهر عندها الكائن
        rectangle.setX(70);
        rectangle.setY(50);

		// rectangle هنا قمنا بتحديد طول و عرض الكائن
        rectangle.setWidth(260);
        rectangle.setHeight(150);

        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود rectangle هنا قمنا بإعطاء الكائن لون
        rectangle.setFill(Color.CADETBLUE);
        rectangle.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

مثال حول الكلاس Rectangle في javafx


المثال التالي يعلمك طريقة جعل المستطيل مستدير الزواية.

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

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل المستطيل الذي نريد إضافته في النافذة Rectangle هنا قمنا بإنشاء كائن من الكلاس
        Rectangle rectangle = new Rectangle();

        // في النافذة rectangle هنا قمنا بتحديد النقطة التي سيظهر عندها الكائن
        rectangle.setX(70);
        rectangle.setY(50);

		// rectangle هنا قمنا بتحديد طول و عرض الكائن
        rectangle.setWidth(260);
        rectangle.setHeight(150);
		
		// بالعرض و الطول rectangle هنا قنما بتحديد درجة إنحناء زوايا الكائن 
        rectangle.setArcWidth(30); 
        rectangle.setArcHeight(20); 

        // إلى اللون الأزرق و حددنا أن لون حدوده هو الأسود rectangle هنا قمنا بإعطاء الكائن لون
        rectangle.setFill(Color.CADETBLUE);
        rectangle.setStroke(Color.BLACK);

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

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

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

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

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

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

    }

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

}
		

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

طريقة جعل زوايا الـ Rectangle دائرية الشكل في javafx

 طريقة رسم صورة نوعها SVG في الكلاس SVGPath 

الكلاس SVGPath يستخدم لرسم الصور التي نوعها SVG في النافذة.
معلومة: هذا النوع من الصور يتميز بأنه يتلائم مع حجم أي شاشة يتم عرضه عليها.

لتحديد الصورة التي سيتم رسمها نستخدم الدالة setContent().


المثال التالي يعلمك طريقة رسم صورة نوعها SVG في النافذة.
ملاحظة: كود الصورة المستخدمة في المثال تم نسخه من هذا الموقع icomoon.io

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.SVGPath;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثل الصورة التي نريد إضافتها في النافذة SVGPath هنا قمنا بإنشاء كائن من الكلاس
        SVGPath svgPath = new SVGPath();
        
		// svgPath هنا قمنا بتحديد المكان الذي سيتم فيه وضع الكائن
        svgPath.setTranslateX(120);
        svgPath.setTranslateY(90);
        
        // svgPath الذي يمثل الصورة التي سنعرضها كمحتوى للكائن SVG هنا قمنا بتمرير كود الـ
        svgPath.setContent("M21.501 10.587c0.013-0.054 0.021-0.092 0.024-0.113l0.065-0.472-2.959-0.017c-2.674-0.015-3.492 0-3.565 0.068-0.035 0.032-0.958 3.54-2.603 9.892-0.785 3.030-1.445 5.45-1.468 5.378s-0.962-3.531-2.087-7.686c-1.125-4.155-2.069-7.578-2.097-7.606-0.039-0.039-3.624-0.056-6.526-0.031-0.421 0.004-0.655-0.819 3.751 13.196 0.61 1.94 1.523 4.687 2.029 6.105 0.583 1.634 0.999 2.895 1.283 3.948 0.502 2.004 0.52 3.26 0.41 4.727-0.127 1.694-0.145 13.652-0.021 13.852 0.095 0.153 5.701 0.224 6.232 0.079 0.085-0.023 0.142-0.106 0.179-0.558 0.132-0.389 0.143-1.936 0.143-8.359v-8.205l0.359-1.132c0.235-0.741 0.825-2.687 1.312-4.326s1.076-3.601 1.309-4.361c2.115-6.895 4.134-13.677 4.187-14.063l0.043-0.316z M52.883 20.541l-0.001 0.427-0.067 0.001-0.037 11.812-0.036 11.452-0.917 0.933c-1.026 1.045-1.849 1.444-2.593 1.257-0.81-0.203-0.79 0.112-0.858-13.423l-0.062-12.459h-5.895v0.428h-0.068v13.518c0 14.484-0 14.475 0.734 15.93 0.585 1.158 1.438 1.722 2.899 1.917h0c1.924 0.256 4-0.616 5.923-2.488l0.836-0.814v1.403c0 1.212 0.035 1.413 0.254 1.474 0.36 0.1 4.823 0.107 5.306 0.008l0.4-0.082v-0.414l0.068-0.014v-30.944l-5.887 0.079z M37.931 26.646c-0.558-2.396-1.605-4.007-3.327-5.121-2.705-1.75-5.795-1.935-8.662-0.518-2.089 1.032-3.434 2.745-4.129 5.255-0.083 0.299-0.144 0.551-0.19 0.926-0.177 0.887-0.198 2.209-0.243 8.372-0.070 9.495 0.038 10.625 1.228 12.782 1.166 2.115 3.588 3.666 6.223 3.986 0.794 0.096 2.402-0.054 3.327-0.31 2.102-0.583 4.117-2.244 5.007-4.13 0.385-0.815 0.617-1.381 0.757-2.416 0.261-1.414 0.279-3.698 0.279-9.523-0-7.43-0.024-8.241-0.271-9.303zM31.209 46c-0.494 0.377-1.358 0.541-2.061 0.391-0.541-0.115-1.271-0.964-1.496-1.738-0.28-0.965-0.301-14.374-0.060-17.004 0.399-1.316 1.512-2.003 2.727-1.676 0.947 0.255 1.432 0.848 1.709 2.091 0.205 0.922 0.229 2.071 0.186 8.829-0.029 4.481-0.045 6.671-0.191 7.847-0.149 0.742-0.395 0.94-0.813 1.26z M143.774 33.384h2.848l-0.045-2.58c-0.044-2.367-0.079-2.637-0.395-3.279-0.499-1.013-1.235-1.463-2.403-1.463-1.403 0-2.292 0.678-2.712 2.071-0.179 0.593-0.366 4.668-0.232 5.019 0.075 0.197 0.483 0.232 2.939 0.232z M124.737 27.515c-0.38-0.765-1.087-1.142-1.908-1.113-0.639 0.023-1.348 0.292-2.031 0.813l-0.509 0.386v18.537l0.509 0.386c1.152 0.878 2.417 1.064 3.289 0.481 0.345-0.231 0.57-0.549 0.745-1.054 0.228-0.658 0.248-1.5 0.218-9.298-0.031-8.128-0.049-8.606-0.313-9.139z M160.055 19.165c-0.567-6.803-1.019-9.010-2.422-11.847-1.858-3.756-4.543-5.737-8.367-6.172-2.957-0.336-14.082-0.811-24.378-1.039-17.824-0.396-47.129 0.366-50.871 1.323-1.73 0.442-3.027 1.194-4.376 2.538-2.365 2.354-3.774 5.73-4.341 10.4-1.293 10.663-1.321 23.545-0.074 34.595 0.536 4.753 1.64 7.84 3.713 10.385 1.293 1.588 3.522 2.937 5.516 3.34 1.399 0.283 8.401 0.675 18.6 1.042 1.519 0.055 5.542 0.149 8.939 0.209 7.081 0.126 20.102 0.051 27.545-0.157 5.008-0.141 14.138-0.511 15.844-0.643 0.48-0.037 1.592-0.108 2.471-0.158 2.955-0.167 4.835-0.785 6.6-2.172 2.285-1.795 4.054-5.112 4.801-9.002 0.707-3.681 1.18-10.236 1.276-17.678 0.080-6.218-0.027-9.573-0.476-14.963zM89.080 16.7l-3.311 0.041-0.145 35.321-2.871 0.036c-2.22 0.031-2.894-0.003-2.948-0.145-0.038-0.102-0.085-8.064-0.105-17.697l-0.036-17.515-6.468-0.082v-5.519l19.114 0.077 0.082 5.442-3.311 0.041zM109.388 36.945v15.19h-5.233v-1.599c0-1.203-0.046-1.599-0.186-1.599-0.103 0-0.577 0.397-1.054 0.881-1.035 1.051-2.261 1.898-3.307 2.289-2.166 0.81-4.224 0.337-5.101-1.172-0.802-1.382-0.818-1.691-0.818-16.021v-13.159h5.228l0.041 12.392c0.039 12.176 0.045 12.4 0.336 12.896 0.386 0.658 0.975 0.834 1.912 0.577 0.551-0.151 0.927-0.419 1.821-1.308l1.126-1.122v-23.434h5.233v15.19zM129.797 49.963c-0.461 1.026-1.488 2.032-2.33 2.28-2.198 0.649-3.961 0.12-5.996-1.794-0.631-0.594-1.219-1.077-1.308-1.077-0.107 0-0.163 0.466-0.163 1.381v1.381h-5.233v-40.99h5.233v6.686c0 3.678 0.049 6.686 0.109 6.686s0.612-0.488 1.227-1.081c1.414-1.365 2.597-1.962 4.097-2.076 2.676-0.203 4.27 1.175 5.001 4.32 0.228 0.981 0.25 2.102 0.25 11.192-0 11.074-0.001 11.12-0.886 13.091zM151.937 43.886c-0.047 1.139-0.185 2.446-0.309 2.907-0.728 2.698-2.665 4.608-5.464 5.392-3.77 1.055-7.919-0.674-9.575-3.988-0.93-1.861-0.963-2.232-0.963-11.324 0-7.414 0.026-8.323 0.263-9.335 0.672-2.862 2.337-4.714 5.156-5.742 0.817-0.298 1.669-0.45 2.521-0.468 3.042-0.062 6.061 1.574 7.327 4.238 0.854 1.797 0.959 2.566 1.045 7.631l0.077 4.542-11.156 0.077-0.041 3.053c-0.058 4.306 0.232 5.63 1.395 6.414 0.978 0.659 2.48 0.609 3.298-0.109 0.766-0.673 0.983-1.396 1.058-3.507l0.068-1.853h5.387l-0.086 2.071z");

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

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

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

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

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

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

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

}
		

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

مثال حول الكلاس SVGPath في javafx

JavaFX الدالة Shape.union()

لدمج الأجزاء المشتركة و الغير مشتركة بين الأشكال مع بعضها نستخدم الدالة الثابتة Shape.union().
بعد أن تقوم بدمج الأشكال ترجع كائن من الكلاس Shape يمثل الشكل الجديد.


عملية دمج الأجزاء المشتركة و الغير مشتركة بين الأشكال مع بعضها البعض كما فعلنا في المثال التالي يقال لها Union Operation.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثلا المستطيلان اللذين نريد إضافتهما في النافذة Rectangle هنا قمنا بإنشاء كائنين من الكلاس
        Rectangle rectangle1 = new Rectangle();
        Rectangle rectangle2 = new Rectangle();

        // في النافذة rectangle2 و rectangle1 هنا قمنا بتحديد مكان ظهور الكائنين
        rectangle1.setX(80);
        rectangle1.setY(60);
        rectangle2.setX(170);
        rectangle2.setY(110);

        // rectangle2 و rectangle1 هنا قمنا بتحديد طول و عرض الكائنين
        rectangle1.setWidth(150);
        rectangle1.setHeight(80);
        rectangle2.setWidth(150);
        rectangle2.setHeight(80);

        // rectangle2 و rectangle1 يمثل الأجزاء المشتركة و الغير مشتركة بين الكائنين Shape للحصول على كائن union() هنا قمنا باستدعاء الدالة
        Shape shape = Shape.union(rectangle1, rectangle2);
        
		// هنا قمنا بتحديد لون الشكل الجديد, لون حدوده و سمك حدوده أيضاً
        shape.setStroke(Color.BLACK);
        shape.setFill(Color.CADETBLUE);
        shape.setStrokeWidth(3);
        
        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

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

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

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

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

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

    }

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

}
		

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

مثال حول Union Operation في javafx

JavaFX الدالة Shape.subtract()

لحذف الأجزاء المشتركة بين الشكل و الأشكال القربية منه نستخدم الدالة الثابتة Shape.subtract().
بعد أن تقوم بدمج الأشكال ترجع كائن من الكلاس Shape يمثل الشكل الجديد.


عملية حذف أجزاء من الشكل نسبة للأشكال الأخرى التي نقربها منه كما فعلنا في المثال التالي يقال لها Subtraction Operation.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثلا المستطيلان اللذين نريد إضافتهما في النافذة Rectangle هنا قمنا بإنشاء كائنين من الكلاس
        Rectangle rectangle1 = new Rectangle();
        Rectangle rectangle2 = new Rectangle();

        // في النافذة rectangle2 و rectangle1 هنا قمنا بتحديد مكان ظهور الكائنين
        rectangle1.setX(80);
        rectangle1.setY(60);
        rectangle2.setX(170);
        rectangle2.setY(110);

        // rectangle2 و rectangle1 هنا قمنا بتحديد طول و عرض الكائنين
        rectangle1.setWidth(150);
        rectangle1.setHeight(80);
        rectangle2.setWidth(150);
        rectangle2.setHeight(80);

        // rectangle2 و rectangle1 يمثل الأجزاء المشتركة فقط بين الكائنين Shape للحصول على كائن subtract() هنا قمنا باستدعاء الدالة
        Shape shape = Shape.subtract(rectangle1, rectangle2);
        
		// هنا قمنا بتحديد لون الشكل الجديد, لون حدوده و سمك حدوده أيضاً
        shape.setStroke(Color.BLACK);
        shape.setFill(Color.CADETBLUE);
        shape.setStrokeWidth(3);
        
        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

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

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

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

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

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

    }

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

}
		

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

مثال حول Subtraction Operation في javafx

JavaFX الدالة Shape.intersect()

لدمج الأجزاء المشتركة فقط بين الأشكال مع بعضها نستخدم الدالة الثابتة Shape.intersect().
بعد أن تقوم بدمج الأشكال ترجع كائن من الكلاس Shape يمثل الشكل الجديد.


عملية دمج الأجزاء المشتركة فقط بين الأشكال مع بعضها البعض كما فعلنا في المثال التالي يقال لها Intersection Operation.

مثال

Main.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // يمثلا المستطيلان اللذين نريد إضافتهما في النافذة Rectangle هنا قمنا بإنشاء كائنين من الكلاس
        Rectangle rectangle1 = new Rectangle();
        Rectangle rectangle2 = new Rectangle();

        // في النافذة rectangle2 و rectangle1 هنا قمنا بتحديد مكان ظهور الكائنين
        rectangle1.setX(80);
        rectangle1.setY(60);
        rectangle2.setX(170);
        rectangle2.setY(110);

        // rectangle2 و rectangle1 هنا قمنا بتحديد طول و عرض الكائنين
        rectangle1.setWidth(150);
        rectangle1.setHeight(80);
        rectangle2.setWidth(150);
        rectangle2.setHeight(80);

        // rectangle2 و rectangle1 يمثل الأجزاء المشتركة فقط بين الكائنين Shape للحصول على كائن intersect() هنا قمنا باستدعاء الدالة
        Shape shape = Shape.intersect(rectangle1, rectangle2);
        
		// هنا قمنا بتحديد لون الشكل الجديد, لون حدوده و سمك حدوده أيضاً
        shape.setStroke(Color.BLACK);
        shape.setFill(Color.CADETBLUE);
        shape.setStrokeWidth(3);
        
        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

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

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

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

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

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

    }

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

}
		

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

مثال حول Intersection Operation في javafx

كورس تعلم javaFX