جدول المحتويات:

تم تشغيل تطبيق Java على قاعدة بيانات Google Drive: 8 خطوات
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive: 8 خطوات

فيديو: تم تشغيل تطبيق Java على قاعدة بيانات Google Drive: 8 خطوات

فيديو: تم تشغيل تطبيق Java على قاعدة بيانات Google Drive: 8 خطوات
فيديو: ملخص حياة المبرمج 😂 #Shorts 2024, شهر نوفمبر
Anonim
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive
تم تشغيل تطبيق Java على قاعدة بيانات Google Drive

هل سبق لك أن أردت إنشاء تطبيق يعمل على قاعدة بيانات ديناميكية يسهل التعامل معها ، ويسمح للمستخدمين غير المتمرسين بالتكنولوجيا بإدخال البيانات فيه ، ولا يستهلك موارد الشركة؟ حسنًا ، لدي حل لك. اليوم ، سنبني تطبيقًا يعمل على Google Drive (حسنًا ، جداول بيانات Google على وجه التحديد) ويمكن استخدامه لمجموعة متنوعة من الأغراض المختلفة. على الرغم من أن هذا البرنامج التعليمي سيركز على إنشاء تطبيق قائم على الأحداث لعرض قائمة بالأحداث التي تحدث حول الحرم الجامعي ، يمكن بسهولة إعادة كتابة هذا المشروع ليعمل بعدة طرق ، سواء كان تطبيق آلة حاسبة لتطبيق يراقب مخزون للمنتجات. لقد أرفقت نسخة من طلبي إذا كنت ترغب في معرفة ما سنقوم به. قم بفك ضغط الملف المضغوط وتشغيل JAR بداخله. والآن ، دون مزيد من اللغط ، لنبدأ!

الخطوة 1: ما سوف تحتاجه

لبدء هذا المشروع ، ستحتاج إلى الموارد التالية:

  • نتبينز

    أوصي بتنزيل Java EE لأنه يوفر دعمًا للخادم ، ولكن إذا كنت لا تريد بعض الملفات غير الضرورية أو مساحة القرص الإضافية ، فستعمل Java SE أيضًا. سيعمل Netbeans بمثابة IDE خارجي لترميز تطبيقاتنا وتجميعها

  • Jsoup

    لقد قمت بتضمين هذا في Instructables لتتمكن من تنزيله. إنه محلل HTML سيسمح لنا بسحب المعلومات من جدول البيانات المنشور

  • جافا SDK (V8)

    قم بتنزيل أي ملف يناسب نظامك. إذا كان لديك بالفعل Java SDK في إصدار سابق ، فإنني أوصي بالتحديث. تستخدم بعض وظائفي تعبيرات lambda جديدة أصلية في الإصدار 8 ، وقد لا تعمل الشفرة بدونها اعتمادًا على ما تفعله

  • ستوديو مرئي (اختياري)

    تماما اختياري. على الرغم من أن NetBeans يعمل بشكل مذهل في تجميع وتغليف تطبيقنا ، إلا أنني لست معجبًا كبيرًا باستوديو التطوير. أنا أفضل البرمجة في VS ، لأنه يحتوي على واجهة أفضل. إذا لم يعجبك هذا ، فهناك الكثير من IDEs الأخرى عبر الإنترنت ، لذا ابحث عن ما تفضله

  • كود المبتدئين

    لقد قمت بتضمين رمز البدء في موارد هذا ، ونشرته أيضًا على GitHub. في هذا ، لدي الملف الرئيسي (الحدث) الذي يوفر بنية الملف الذي يقوم بتشغيل التطبيق بالفعل ، بالإضافة إلى EventTester ، الذي يستخدم JavaFX لإنشاء واجهة المستخدم الرسومية للتطبيق. إذا كنت ترغب في الحصول على التجربة الكاملة ، لا أوصي بالنسخ واللصق. خذ وقتك واقرأ هذا

آحرون:

المعرفة الأساسية بجافا. سيكون من المفيد أن تكون على دراية بجافا ، مثل وظائف الكتابة ، وإنشاء الكائنات ، وما إلى ذلك

الخطوة 2: إعداد قاعدة البيانات الخاصة بك

إعداد قاعدة البيانات الخاصة بك
إعداد قاعدة البيانات الخاصة بك

لبدء المشروع ، نحتاج أولاً إلى الدخول إلى Google Drive وإنشاء الورقة التي سنستخدمها لتشغيل تطبيقنا. توجه إلى drive.google.com وانقر على رمز "جديد" في الزاوية اليسرى العليا ، وحدد "جداول البيانات" أسفل هذا.

بمجرد تحميل الورقة ، امض قدمًا وأعد تسميتها إلى شيء يسهل التعرف عليه. بعد القيام بذلك ، امض قدمًا واملأ الصف العلوي بأسماء بياناتك ، مثل الأشياء التي ستضعها في كل عمود. بالنظر إلى المثال الخاص بي هنا ، قمت بتسمية الصف العلوي بأشياء مثل "اسم الحدث" و "التاريخ" وما إلى ذلك.

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

بعد إدخال بياناتك ، انشر جدول البيانات بالانتقال إلى "ملف" -> "النشر على الويب". من هنا ، سترغب في تحديد المستند بأكمله والتأكد من نشره كملف HTML ، وبهذه الطريقة يكون تطبيقنا قادرًا على رسم البيانات بشكل صحيح. بعد نشر جدول البيانات ، تأكد من تدوين الرابط الذي يوفره. سيكون هذا مطلوبًا لاحقًا في التطبيق.

الخطوة 3: إعداد NetBeans

إعداد NetBeans
إعداد NetBeans

الآن بعد أن أصبح لدينا جدول البيانات الخاص بنا ، حان الوقت لإعداد NetBeans حتى نتمكن من بدء الترميز. بعد تنزيل NetBeans وجافا SDK وتثبيتهما ، انطلق وأنشئ مشروعًا جديدًا. عند اختيار النوع ، اختر فئة "Java" ومشروع "تطبيق Java". اختر ما تريد أن يطلق عليه مشروعك (سميت مشروعك ببساطة "حدث"). حدد مربع الاختيار بجوار "استخدام مجلد مخصص لتخزين المكتبات" ، بالإضافة إلى المربع الموجود بجانب "إنشاء فئة رئيسية". بعد ذلك ، يجب على NetBeans إنشاء دليل مشروع ومشروع لنا لكي نبدأ العمل فيه ، تمامًا مثل ذلك الموجود في الصورة.

قبل أن نبدأ في البرمجة ، سنحتاج أيضًا إلى التأكد من أن NetBeans لديه مكتبة JSoup التي ستحتاجها لتحليل جدول البيانات الخاص بنا. في NetBeans ، انقر بزر الماوس الأيمن فوق رمز "Libraries" أسفل دليل مشروعك. ضمن القائمة المنبثقة ، حدد الزر لإضافة ملف.jar. الآن ، انتقل إلى المكان الذي وضعت فيه تنزيل jsoup (على الأرجح مجلد التنزيلات ، ما لم تحدد في مكان آخر). اختر هذا الملف وأضفه إلى المكتبة. إذا قمت بتوسيع مجلد Libraries في NetBeans ، فيجب أن تشاهد الآن jsoup.jar في هذه المنطقة. بعد القيام بذلك ، يمكننا الآن البدء في ترميز تطبيقنا.

الخطوة 4: ترميز صفنا الرئيسي

ترميز صفنا الرئيسي
ترميز صفنا الرئيسي

لذا ، فإن الخطوة الأولى في ترميز تطبيقنا هي إنشاء فصلك الرئيسي. سيكون فصلك الرئيسي هو المكان الذي ننشئ فيه كائناتنا ، ولدينا الأساليب التي تتفاعل مع JSoup ، وأكثر من ذلك. بافتراض أن كل شخص يقرأ هذا لديه خبرة في الترميز ، فاستمر في استخدام عمليات الاستيراد التالية:

استيراد java.util. Collections ؛

استيراد java.util. List ؛

استيراد java.util. ArrayList ؛

استيراد java.util. Date ؛

استيراد java.util.stream. Stream ؛

استيراد java.util.stream. Collectors ؛

استيراد java.text. SimpleDateFormat ؛

استيراد java.text. ParseException ؛

استيراد org.jsoup. Jsoup ؛

استيراد org.jsoup.nodes. Document ؛

استيراد org.jsoup.nodes. Element ؛

import org.jsoup.select. Elements؛

استيراد javafx.beans.property. SimpleStringProperty ؛

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

بعد أن حصلنا على بيانات الاستيراد الخاصة بنا ، دعنا نمضي قدمًا ونعلن عن صفنا. إذا كنت تخطط لاستخدام التواريخ أو أي كائن غير أساسي عند تطوير كائن خاص بالفصل ، فإنني أوصي بإضافة "أدوات قابلة للمقارنة" إلى إعلان الفصل الخاص بك. سيسمح لك هذا بمقارنة الكائنات ، مما سيسمح لك بفرز قائمة ClassObjects لاحقًا. بعد القيام بذلك ، امض قدمًا وأعلن عن جميع متغيرات الحالة التي ستحتاجها. لكل سلسلة عامة تقوم بإنشائها ، ستحتاج أيضًا إلى إنشاء SimpleStringProperty لها. هذه هي كائنات JavaFX التي ستسمح لنا بالعمل مع كائنات الفئة الرئيسية لاحقًا.

الآن ، انطلق وأعلن أنك تصل إلى الوظائف. بقدر ما تذهب المتغيرات الأساسية الخاصة بك ، يمكنك تسمية وظائفك مهما اخترت. ومع ذلك ، بالنسبة لوظائف الوصول إلى SSP ، يجب عليك استخدام التنسيق getFunctionNameHere (). هذا لأننا سنستخدم JavaFX لاحقًا للاتصال بهذه الوظائف ، والوظائف التي سنستخدمها تتطلب منا بدء وظائف SSP الخاصة بنا بـ get. يمكنك رؤية مثال أعلاه.

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

الخطوة الخامسة: تحديد طريقة الإنشاء ()

تحديد طريقة الإنشاء ()
تحديد طريقة الإنشاء ()

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

أحداث الحدث = جديد ArrayList ()).

الآن ، اذهب وابحث عن عنوان URL الذي نسخته مسبقًا إلى جدول البيانات المنشور. قم بتعريف هذا الارتباط كسلسلة في Java ، وقم بتسميته كما تريد. الآن ، انطلق وأعلن عن وثيقة Jsoup جديدة. يمكنك القيام بذلك عن طريق إنشاء كائن مستند جديد ، مثل

مستند doc = مستند جديد () ؛

الآن ، انطلق وقم بتعيين المستند الخاص بك للاتصال بعنوان URL الخاص بنا والحصول على البيانات. للقيام بذلك ، حاول:

مستند doc = Jsoup.connect (url).get () ،

الآن ، نحتاج إلى الحصول على نص وثيقتنا ، حيث يتم تخزين البيانات الفعلية.

String body = doc.body (). text () ؛

الآن ، علينا أن نبدأ في سحب البيانات من الجسم. نظرًا لأن بياناتنا موجودة في جدول (نظرًا لأنه كان جدول بيانات) ، فنحن بحاجة إلى إخراج الجدول من الجسم. لنجرب

جدول العناصر = doc.select ("table"). get (0)؛

هذا يحدد الجدول الأول. في هذه الحالة ، هناك واحد فقط. الآن اكتب

صفوف العناصر = table.select ("tr") ؛

هذا يجعلنا جميع الصفوف في الجدول المذكور.

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

لـ (int i = 2 ؛ i <rows.size () ؛ i ++) {

صف العنصر = rows.get (i) ؛

العناصر cols = row.select ("td") ؛

الآن ، لإنشاء كائن ، افعل شيئًا مثل

اسم الكائن = كائن جديد (cols.get (0).text ()) ؛

بشكل أساسي ، ستحصل cols.get (0) على البيانات من الصف (i) العمود (0) ، وتحويلها إلى سلسلة يمكن بعد ذلك تمريرها إلى مُنشئ الكائن.

بعد إعداد البناء الخاص بك ، قم بإضافته إلى القائمة التي أنشأناها مسبقًا باستخدام list.add () ، مثل

Events.add (الاسم) ؛

الآن ، أغلق حلقة for الخاصة بك ، واستدع أي وظائف قد تحتاج إليها الآن. على سبيل المثال ، اتصلت بوظيفة الفرز الخاصة بي للحصول على الأحداث بترتيب التاريخ. بعد القيام بذلك ، أعد قائمتك ثم انتهيت من هذا القسم!

الخطوة السادسة: برمجة تطبيقنا

ترميز تطبيقنا
ترميز تطبيقنا
ترميز تطبيقنا
ترميز تطبيقنا

قم بإنشاء ملف جديد وقم بتسميته كيفما شئت. ستحتاج إلى الواردات التالية:

استيراد java.util. List ؛

استيراد java.util. ArrayList ؛

استيراد java.util. Date ؛

استيراد javafx.geometry. Pos ؛

استيراد javafx.scene.layout. HBox ؛

استيراد javafx.application. Application ؛

استيراد javafx.collections.transformation. FilteredList ؛

استيراد javafx.scene.text. Font ؛ استيراد javafx.scene.control. * ؛

استيراد javafx.collections. FXCollections ؛

استيراد javafx.collections. ObservableList ؛

استيراد javafx.geometry. Insets ؛

استيراد javafx.scene. Group ؛

استيراد javafx.scene. Scene ؛

استيراد javafx.scene.control. Label ؛

استيراد javafx.scene.control.cell. PropertyValueFactory ؛

استيراد javafx.scene.layout. VBox ؛

استيراد javafx.stage. Stage ؛

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

جدول TableView الخاص = new TableView ()؛

أعلن أيضًا عن الطريقة الرئيسية التي سنستخدمها لتشغيل التطبيق. بشكل أساسي ، يجب أن تبدو مثل الصورة في الأعلى.

الآن ، نحن بحاجة إلى إنشاء طريقة البداية الخاصة بنا. تأكد من أنه يطرح الاستثناء ، لأننا سنقوم باستدعاء طريقة create () من صنفنا السابق. اصنع حدثًا جديدًا بمعلمات فارغة ، حتى نتمكن من استدعاء طريقة الإنشاء معها. حدد قائمة جديدة ، واجعلها مساوية لنتيجة الإنشاء (). الآن ، قم بإنشاء قائمة ObservableList جديدة ، والتي سيتم استخدامها لملء جدولنا ببياناتنا. عرِّفه على النحو التالي:

بيانات ObservableList = FXCollections.observableArrayList () ،

الآن ، أنشئ مشهدًا جديدًا باستخدام:

مشهد المشهد = مشهد جديد (مجموعة جديدة ()) ؛

عيّن العنوان والعرض والارتفاع وأي شيء آخر تحتاج إليه لأي شيء يناسبك. يمكنك أن ترى قيمي في الصورة في الأعلى. الآن ، يمكننا البدء في إعداد طاولتنا. لجميع المعلومات التي تريد عرضها ، قم بإنشاء TableColumn ، مثل:

TableColumn eventCol = new TableColumn ("اسم الحدث") ؛ eventCol.setMinWidth (100) ؛ eventCol.setCellValueFactory (new PropertyValueFactory ("sName")) ؛

يجب ملء معلمة "sName" بأي اسم كان لوظائف الوصول إلى SSP ، حتى تتمكن من الحصول على القيم التي تحتاجها للكائنات المحددة. قم بإنشاء أي عدد تريده من الأعمدة ، ثم قم بإضافتها إلى جدول باستخدام

FilteredList flEvent = new FilteredList (data، p -> true)؛

table.setItems (flEvent) ؛

table.getColumns (). addAll (eventCol ، statCol ، groupCol ، DatingCol ، descol ، locationCol) ؛

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

HBox hBox = new HBox (ChoiceBox ، textField) ؛

hBox.setAlignment (Pos. CENTER) ؛

ستحتاج أيضًا إلى إضافة hBox إلى طريقة.addAll () أدناه.

خلاف ذلك ، ما عليك سوى إنشاء BBox جديد للاحتفاظ ببياناتنا من خلال العمل

نهائي VBox vbox = new VBox () ؛

vbox.getChildren (). addAll (التسمية ، الجدول) ؛

((مجموعة) scene.getRoot ()). getChildren (). addAll (vbox) ؛

stage.setScene (مشهد) ؛ stage.show () ؛

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

بعد الانتهاء من الترميز ، أوصي بإنشاء Javadoc من التعليمات البرمجية الخاصة بك حتى يتمكن الأشخاص من رؤية ما يفعله الكود الخاص بك. للقيام بذلك ، تحت زر "تشغيل" في الجزء العلوي من الشاشة ، ما عليك سوى الضغط على "إنشاء Javadoc". يمكنك العثور على نسخة من Javadoc من خلال النظر داخل الملف المضغوط في الصفحة الأولى واختيار ملف index.html.

الخطوة 7: تجميع ملف البرطمان وتعبئته

تجميع وتغليف ملف جرة لدينا
تجميع وتغليف ملف جرة لدينا

بمجرد الانتهاء من تصحيح الأخطاء بشكل كاف وتشغيله بنجاح ، يمكنك أخيرًا تجميع هذا في ملف JAR ، والذي يمكن نشره بعد ذلك حتى يتمكن الآخرون من تشغيل هذا البرنامج دون الحاجة إلى NetBeans أو Jsoup.

قبل تجميع التطبيق الخاص بك ، تأكد من أن كل شيء قد تم. إذا كنت ترغب في إضافة وثائق وإنشاء JavaDoc ، فابدأ في القيام بذلك. إذا كان لديك أي أوامر System.out تطبع على وحدة التحكم الخاصة بك ، فقم بإزالتها. بشكل أساسي ، تأكد من أن التطبيق الخاص بك لا يحتوي على أوامر أو وظائف غير مرغوب فيها ، وأنه يحتوي على كل ما يحتاج إلى حزم.

بعد القيام بذلك ، انقر بزر الماوس الأيمن فوق اسم المشروع في NetBeans. يجب أن تظهر قائمة منبثقة. اضغط على الخصائص (في أسفل القائمة تمامًا) ، ثم اضغط على "تغليف" على الجانب الأيسر من القائمة المنبثقة الجديدة. الآن ، تأكد من تمييز جميع مربعات الاختيار. يجب أن تبدو شاشتك مثل الشاشة أعلاه.

بعد القيام بذلك ، انقر بزر الماوس الأيمن مرة أخرى على مشروعك في NetBeans. في هذه المرحلة ، اضغط على زر "Clean and Build" ، وسيبدأ NetBeans في أخذ مكتباتك وملفاتك وتجميعها في ملف JAR عامل. إذا سارت الأمور على ما يرام ، يجب أن ترى رسالة في وحدة التحكم بعد بضع لحظات تخبرك أن JAR الخاص بك قد انتهى من التجميع ، ويمكن الآن تشغيل الملف. قم بتشغيل هذا التطبيق وتأكد من أن كل شيء يعمل. إذا لم يكن الأمر كذلك ، فقم بتصحيح العملية وإعادة تشغيلها حتى يتم حل الأخطاء.

الخطوة 8: مبروك

تهانينا! إذا اتبعت جميع التعليمات بشكل صحيح وقمت بترميز كل شيء جيدًا ، فيجب أن يكون لديك تطبيق العمل الخاص بك. الشيء الرائع هو أنه عندما تقوم أنت أو أي شخص آخر لديه حق الوصول إلى جدول البيانات الخاص بك بتحرير البيانات ، سيتمكن تطبيقك من تغيير البيانات الجديدة والتفاعل معها. هنا شريط فيديو سريع لكيفية ظهور لي.

إذا كنت تبحث عن طرق لمواصلة التحسين والبناء ، فإنني أوصي بمراجعة بعض ميزات JavaFX الأكثر تقدمًا ، مثل FancyText أو FancyButton ، والتي يمكن أن تضيف بعض الرسومات المتطورة إلى تطبيقك. حظًا سعيدًا ، وقم بإسقاط تعليق إذا كنت بحاجة إلى أي مساعدة أو لاحظت وجود خطأ في الكود الخاص بي!

موصى به: