[Swing] إضافة محتوى JavaFX إلى تطبيق Swing

اذهب الى الأسفل

[Swing] إضافة محتوى JavaFX إلى تطبيق Swing Empty [Swing] إضافة محتوى JavaFX إلى تطبيق Swing

مُساهمة من طرف زهراء في السبت فبراير 09, 2019 11:39 am

فى هذا المقال سأقوم بشرح كيفية إضافة محتوى أو عناصر التحكم [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] إلى تطبيق [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] وكيفية استخدام مؤشرات الترابط بشكل صحيح عندما يعمل كل من Swing و JavaFX داخل تطبيق واحد.

حيث توفر JavaFX SDK الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ، الموجودة في حزمة javafx.embed.swing وتمكنك من تضمين محتوى JavaFX في تطبيقات Swing.

لغرض هذا المقال ، تقوم بإنشاء نافذة رسومية JFrame ، وإضافة كائن 3JFXPanel إليه ، وتعيين المشهد الرسومي لمكون [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الذي يحتوي على محتوى [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]....وذلك على النحو التالى :


1_انشاء Scene هو المنطقة المخصصة في النافذة لوضع المحتوى عليه للجافا اف اكس

الكود:
 private static Scene createScene() {
        Group  root  =  new  Group();
        Scene  scene  =  new  Scene(root,600,300, Color.ALICEBLUE);
        Text  text  =  new  Text();
        
        text.setX(40);
        text.setY(100);
        text.setFont(new Font(25));
        text.setText("Welcome JavaFX!");

        root.getChildren().add(text);

        return (scene);
    }


2_انشاء الحاوية [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ومن ثم اضافة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الية على النحو التالى :

الكود:
 private static void initFX(JFXPanel fxPanel) {
            
             Scene scene = createScene();
             fxPanel.setScene(scene);
         }


3_كما هو الحال في أي تطبيق [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ، يمكنك إنشاء واجهة المستخدم الرسومية (GUI) ....لذلك سنقوم بانشاء الطريقة initAndShowGUI ، والتي تقوم بإنشاء مكون JFrame وإضافة كائن JFXPanel إليها. يؤدي إنشاء مثيل لفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] إلى تشغيل  JavaFX وقت تشغيل بشكلٍ ضمني. بعد إنشاء واجهة المستخدم الرسومية ، قم باستدعاء طريقة initFX لإنشاء مشهد JavaFX على مؤشر ترابط تطبيق JavaFX....وذلك على النحو التالى :

الكود:

private static void initAndShowGUI() {

 JFrame frame = new JFrame("Swing and JavaFX");


 final JFXPanel fxPanel = new JFXPanel();


 frame.add(fxPanel);


 frame.setSize(300, 200);


 frame.setVisible(true);


 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);





 Platform.runLater(new Runnable() {


 @Override


 public void run() {


 initFX(fxPanel);


 }


 });


 }


وهكذا يمكنك تشغيل تطبيقات JAVAFX فى تطبيقات JAVA SWING بشكل ضمنى ....و المثال بالكامل على النحو التالى :

الكود:

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Test {

    private static void initAndShowGUI() {
        // This method is invoked on the EDT thread
        JFrame frame = new JFrame("Swing and JavaFX");
        final JFXPanel fxPanel = new JFXPanel();
        frame.add(fxPanel);
        frame.setSize(300, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
            }
       });
    }

    private static void initFX(JFXPanel fxPanel) {
        // This method is invoked on the JavaFX thread
        Scene scene = createScene();
        fxPanel.setScene(scene);
    }

    private static Scene createScene() {
        Group  root  =  new  Group();
        Scene  scene  =  new  Scene(root, Color.ALICEBLUE);
        Text  text  =  new  Text();
        
        text.setX(40);
        text.setY(100);
        text.setFont(new Font(25));
        text.setText("Welcome JavaFX!");

        root.getChildren().add(text);

        return (scene);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }
}
زهراء
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 401
النقاط : 676
التقيم : 53
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى