تقدم هذه المقالة العملية التفصيلية لكتابة Java كتابة المفكرة على أساس SWT. تتم مشاركتها معك للرجوع إليها. المحتوى المحدد كما يلي
يمكن أن يدرك الوظائف الأساسية لمفتحة سطح المكتب في نظام Windows ، والتدريس على الطراز الخداع ، والتشغيل خطوة بخطوة. يمكن لـ Xiaobai أيضًا كتابة تطبيق كامل بنفسه.
الأدوات المطلوبة: Eclipse (مع المكون الإضافي SWT)
المنتج النهائي كما يلي:
مقدمة وظيفة التطبيق:
التحليل الوظيفي:
تتضمن قائمة الملفات
1.1. إنشاء (n) ctrl+n
1.2Open (O) Ctrl+O.
1.3Save (s) ctrl+s
1.4Save مثل (أ)
1.5 الخروج (x)
تتضمن قائمة التحرير:
2.1 التراجع (u) ctrl+z
2.2 القص (T) Ctrl+T
2.3 نسخة (ج) Ctrl+C
2.4 لصق (P) Ctrl+V
2.5 حذف (ل) ديل
2.6 البحث (د) Ctrl+F
2.7 أوجد المكان التالي (ن) F3
2.8 استبدال (R) Ctrl+H
2.9 انتقل إلى (G) Ctrl+G
2.10 حدد كل (أ) Ctrl+a
2.11 الوقت/التاريخ (د) F5
تتضمن قائمة التنسيق
3.1 غلاف الخط التلقائي (W)
3.2 الخط (و)
تتضمن قائمة العرض
4.1 شريط (ق)
تتضمن قائمة المساعدة
5.1 عرض المساعدة (ح)
5.2 حول المفكرة (أ)
بعد ذلك ، سأعلمك خطوة بخطوة لكتابة مفكرة مع العديد من الفئات المحددة على النحو التالي:
1. notepad.java
هذه الفئة هي فئة الواجهة الرئيسية ، التي تحتوي على أحداث الاستماع في كل زر
2. فئة util.java هذه الفئة هي فئة مساعدة ، والتي تسهل دعوة الأعضاء المحددة في فئة النافذة الرئيسية في فصول أخرى.
3
حول فئة المؤلف ، نافذة مربع حوار لعرض معلومات المؤلف
4.findwindow.java
نافذة حوار لوظيفة البحث
5.go_to.java
انتقل إلى نافذة حوار الوظيفة
6.OpenMethod.java
هناك طريقتان لفتح ملف مغلف
7.Savamethod.java
طريقتان لحفظ الملفات
8.swtrsourcemanager.java
هذه الفئة هي فئة مستوردة من الخارج وتستخدم لتحميل الصور
9.Test.java
إدخال البرنامج ، ملفات جرة الحزمة المريحة لاحقًا
10.quitmethod.java
يتم تغليف طريقتين لإغلاق النافذة
خطوات الكتابة:
واحد. قم بإنشاء مشروع SWT جديد وإنشاء النافذة الأولى
Open Eclipse ، new-> other-> windowbuilder-> SWT Designer-> SWT/Jface Java Project. اسم اسم المشروع المفكرة
افتح مشروع Notepad الذي تم إنشاؤه حديثًا ، انقر بزر الماوس الأيمن على new-> على SCR لإنشاء حزمة جديدة ، تدعى com.chance.org
النصائح: من الأفضل استخدام قواعد التسمية للحزم لاستخدام COM. Custom.org. لا تسأل لماذا ، سوف تفهم بعد العمل في المستقبل.
انقر بزر الماوس الأيمن فوق الحزمة التي تم إنشاؤها حديثًا جديدًا-> آخر-> WindowBuilder-> SWT Designer-> SWT-> اسم نافذة التطبيق Notepad
في هذه المرحلة ، قمنا ببناء نافذة SWT الأولى والنقر على التصميم على الجانب الأيمن من المصدر لعرض الواجهة الرسومية للرقم الذي تم إنشاؤه حديثًا لتحقيق البرمجة البصرية.
أعد تسمية خاصية TXT في الخصائص في نموذج المفكرة إلى: المفكرة
اسحب مكون المركبات في المركبات في مكون المفكرة ، وقم بتعديل خاصية التصميم الخاصة به إلى FillLayout ، أي تصميم تعبئة ، بحيث يمكن تحويل الواجهة بأكملها إلى مجال تحرير لاحقًا. ثم اسحب مكون النص إلى مكون المركبات. تحقق من سمة H_SCROLL وسمة V_SCROLL في نمط خاصية مكون النص إلى TRUE
الوصف: H_Scroll هو شريط تمرير أفقي ، V_Scroll هو شريط التمرير العمودي
اثنين. قم بتعيين الملصقات ذات الصلة لشريط القائمة والتخطيط العام للنموذج
حدد مكون شريط القائمة لسحبه إلى النموذج الرئيسي
1. اضبط عنصر القائمة الأولى (ملف)
حدد مكون قائمة CASCDE ، اسحبه إلى مكون شريط القائمة ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى file_menu ، وتعديل النص إلى ملف (f) ؛
1.1 الإعدادات القائمة الفرعية: إنشاء (n) ctrl+n
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى new_file ، وتعديل النص إلى: جديد (n) ctrl+n ؛
1.2 الإعدادات القائمة الفرعية: افتح (O) Ctrl+O
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة إلى OPEN_FILE ، وتعديل النص إلى: OPEN (O) CTRL+O
1.3 الإعدادات القائمة الفرعية: حفظ (O) Ctrl+S
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة إلى Save_File ، وتعديل النص إلى: حفظ (O) Ctrl+S
1.4 الإعدادات القائمة الفرعية: حفظ باسم (أ)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى SAVE_AS ، وتعديل النص إلى: حفظ باسم (أ)
1.5 إعدادات القائمة الفرعية: الخروج (x)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى الإقلاع ، وتعديل النص إلى: EXIT (x)
2. اضبط عنصر القائمة الثانية (تحرير)
حدد مكون قائمة CASCDE ، اسحبه إلى مكون شريط القائمة ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى EDIT_MENU ، وتعديل النص إلى تحرير (E) ؛
2.1 الإعدادات القائمة الفرعية: التراجع (U) Ctrl+z
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة للتراجع ، وتعديل النص إلى: التراجع عن (u) ctrl+z ، وتغيير تمكين إلى خطأ ؛
2.2 الإعدادات القائمة الفرعية: CUT (T) CTRL+T
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى القطع ، وتعديل النص إلى: CUT (T) CTRL+T ، وتغيير تمكين إلى FALSE ؛
2.3 الإعدادات القائمة الفرعية: نسخة (C) Ctrl+C
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة للنسخ ، وتعديل النص إلى: COPY (C) CTRL+C ، وتغيير تمكين إلى FALSE ؛
2.4 الإعدادات القائمة الفرعية: لصق (ع) Ctrl+V
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة للصق ، وتعديل النص إلى: Paste (P) Ctrl+V
2.5 الإعدادات القائمة الفرعية: حذف (ل) ديل
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة لحذف ، وتعديل النص إلى: حذف (l) del ، وتغيير تمكين إلى false ؛
2.6 الإعدادات القائمة الفرعية: البحث (د) Ctrl+F
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة للعثور على النص ، وتعديله إلى: البحث عن (D) CTRL+F ، وتغيير تمكين إلى خطأ ؛
2.7 الإعدادات القائمة الفرعية: ابحث عن المكان التالي (ن) F3
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة إلى Find_Next ، وتعديل النص إلى: البحث عن المكان التالي (N) F3 ، وتغيير تمكين إلى خطأ ؛
2.8 الإعدادات القائمة الفرعية: استبدال (R) Ctrl+H
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة لاستبدال ، وتعديل النص إلى: استبدال (R) CTRL+H ، وتغيير تمكين إلى خطأ ؛
2.9 الإعدادات القائمة الفرعية: انتقل إلى (G) Ctrl+G
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى go_to ، وتعديل النص إلى: انتقل إلى (g) ctrl+g
2.10 الإعدادات القائمة الفرعية: حدد كل (أ) Ctrl+أ
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى Selectall ، وتعديل النص إلى: حدد كل (أ) CTRL+
2.11 الإعدادات القائمة الفرعية: الوقت/التاريخ (د) F5
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: قم بتغيير السمة المتغيرة إلى العرض ، وتعديل النص إلى: الوقت/التاريخ (د) F5
3. اضبط عنصر القائمة الثالثة (تنسيق)
حدد مكون قائمة CASCDE ، اسحبه إلى مكون شريط القائمة ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى Format_Menu ، وتعديل النص إلى التنسيق (O) ؛
3.1 الإعدادات القائمة الفرعية: التفاف الخط التلقائي (W)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى Auto_enter ، وتعديل النص إلى: WRAP Automatic Line (W)
3.2 الإعدادات القائمة الفرعية: الخط (F)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى setFont ، وتعديل النص إلى: FONT (F)
4. اضبط عنصر القائمة الرابعة (عرض)
حدد مكون قائمة CASCDE ، واسحبه إلى مكون شريط القائمة ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى view_menu ، وتعديل النص إلى عرض (V) ؛
4.1 الإعدادات القائمة الفرعية: شريط الحالة (S)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وتعديل السمة: تعديل السمة المتغيرة إلى الحالة ، وتعديل النص إلى: شريط الحالة (S)
5. اضبط عنصر القائمة الخامسة (المساعدة)
حدد مكون قائمة CASCDE ، اسحبه إلى مكون شريط القائمة ، وقم بتعديل السمة: تعديل السمة المتغيرة إلى Help_menu ، وتعديل النص إلى المساعدة (H) ؛
5.1 الإعدادات القائمة الفرعية: عرض التعليمات (ح)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: قم بتغيير السمة المتغيرة إلى LookHelp ، وتعديل النص إلى: عرض التعليمات (H)
5.2 الإعدادات القائمة الفرعية: حول المفكرة (أ)
حدد عنصر القائمة لإضافته إلى مكون قائمة CASCDE ، وقم بتعديل السمة: قم بتغيير السمة المتغيرة إلى AboutAuthor ، وتعديل النص إلى: About Notepad (A)
في هذه المرحلة ، تم تعيين عرض تخطيط الصفحة بأكمله على النحو التالي:
بعد ذلك ، قم بتنفيذ وظائف مختلفة
ثلاثة. إعدادات قائمة اختصار قائمة الإعدادات
مقدمة في وظيفة setaccelerator () : استخدم وظيفة setAccelerator () لتعيين مفاتيح الاختصار ذات الصلة. المعلمات التي تم تمريرها هي قيم رئيسية. على سبيل المثال ، تم تعيين مفتاح الاختصار Ctrl+N على النحو التالي: كائن. setAccelerator (swt.ctrl+'n') ؛
طريقة إعداد مفتاح الاختصار F5 هي: Object.setAccelerator (SWT.F5) ؛
من هذا يمكننا تعيين جميع مفاتيح الاختصار المطلوبة
new_file.setaccelerator (swt.ctrl + 'n') ؛ // إنشاء اختصار ملف جديد Open_File.setAccelerator (SWT.CTRL + 'O') ؛ // حفظ اختصار الملف undo.setaccelerator (SWT.CTRL + 'Z') ؛ // التراجع عن اختصار cut.setaccelerator (swt.ctrl + 't') ؛ // CUT A CORPORCUT COPY.SetAccelerator (SWT.CTRL + 'C') ؛ // انسخ مختصرة paste.setaccelerator (swt.ctrl + 'v') ؛ // لصق مفتاح الاختصار DELETE.SetAccelerator (SWT.DEL) ؛ // حذف مفتاح الاختصار // ابحث عن مفتاح الاختصار find_next.setaccelerator (SWT.F3) ؛ // ابحث عن مفتاح الاختصار التالي Reply.SetAccelerator (SWT.CTRL + 'H') ؛ // استبدل مفتاح الاختصار go_to.setaccelerator (swt.ctrl + 'g') ؛ // انتقل إلى مفتاح الاختصار selectall.setaccelerator (swt.ctrl + 'a') ؛ // حدد جميع مفاتيح الاختصار showdate.setaccelerator (swt.f5) ؛ // إظهار مفاتيح اختصار الوقت
4. إضافة وظيفة الاستماع للحدث (1) فئة الملفات
أضف وظيفة الاستماع للحدث إلى كل قائمة من الملفات
1. أضف حدث الاستماع إلى قائمة "الخروج"
وصف الوظيفة: إن تنفيذ تشغيل هذه القائمة للخروج من التطبيق بسيط نسبيًا. استدعاء دالة النظام system.exit (0) ؛ يمكنك النقر فوق مكون "Time/Date (F5)" في وضع التصميم ثم النقر فوق "إظهار الحدث"-> SELECT-> انقر نقرًا مزدوجًا فوق عنصر واجهة المستخدم
رمز الحدث كما يلي:
Quit.AddSelectionListener (SelectionAdapter () { / *** أضف حدث الاستماع لقائمة "الخروج"* الوصف: إن تشغيل هذه القائمة سيخرج من التطبيق* / public void widgetselected (SelectionEvent e) {system.exit (0) ؛}}) ؛ولكن هل حقيقة أن بسيطة؟ في الواقع ، ليست هذه هي الحالة التي يمكنك فقط النقر للخروج ثم الخروج مباشرة. لا تزال هناك تلميحات عند الإقلاع عنها في مفكرة حقيقية ، وبالتالي فإن الكود المحسّن هو كما يلي ؛
public void diyquit () { / *** عند الخروج من الوظيفة ، حدد ما إذا كان من الضروري حفظه* / string tips ؛ System.out.println (util.shell.getText (). getText ()) ؛ if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {// دليل الملفات غير فارغ ، مما يعني وجود ملف مفتوح. تحتاج إلى أن تسأل عما إذا كنت ستنقذها إذا تغير (util.shell.filedir == null) {tips = "لقد تغير النص غير المسمى للملف. /n"+"هل تريد حفظ الملف؟" ؛ } آخر {tips = "file" + util.shell.filedir + "تم تغيير نص" ". /n "+" هل تريد حفظ الملف؟ "} int n = joptionpane.showConfirmDialog (null ، tips ،" notepad "، joptionpane.yes_no_cancel_option) ؛ if (n == 0) حفظ الملف وافتح الملف آخر إذا (n == 1) TIPS = "لقد تغير النص بدون عنوان للملف. /n "+" هل تريد حفظ الملف؟ "؛ int n = joptionpane.showConfirmDialog (null ، tips ،" notepad "، joptionpane.yes_no_cancel_option) ؛ if (n == 0) الملف وافتح الملف آخر (n == 1)أحدد كل عملية في حدث الاستماع التالي كدالة. طريقة إضافة حدث الاستماع هي نفس الخطوة الأولى. طريقة التنفيذ المحددة هي كما يلي:
2. أضف قائمة "حفظ AS" للاستماع إلى الأحداث
وصف الوظيفة: قم بإعداد هذه القائمة و Save As Window ستظهر ، وحفظ الملف كما في مكان آخر. من أجل تسهيل إعادة استخدام الكود ، احفظه على أنه تغليفه في طريقة واستدعاء الرمز على النحو التالي:
public void saveas () { / *** تغليفه على أنها هذه الطريقة لتسهيل حوار الاتصال* / fileDialog = جديد fileDialog (util.shell.shell ، swt.save) ؛ Dialog.SetFilterPath (System.getProperty ("C: // المستندات والإعدادات")) // قم بتعيين امتداد ملف Dialog.setFilternames (string [] {"ملفات نصية (*.txt)" ، "جميع الملفات (*.*)"}) ؛ // قم بتعيين اسم الامتداد المعروض في ملف سلسلة المربع المنسدلة = dialog.open () ؛ // افتح النافذة وأرجع إلى دليل الملف المحدد بواسطة المستخدم if (file! = null) {util.shell.filedir = file ؛ // save the file file ، استخدم لاحقًا}} file.trim ())). getName ()) ؛ // احصل على اسم الملف (باستثناء المسار) لتعيين العنوان filewriter ؛ حاول {filewRiter = new filewRiter (file) ؛ BufferedWriter Out = New BufferedWriter (FilewRiter) ؛ out.write (util.shell.getText (). getText ()) ؛ out.close () ؛ filewriter.close () ؛ } catch (ioException e1) {e1.printStackTrace () ؛ }}}3. أضف حدث الاستماع "حفظ"
وصف الوظيفة: عند تشغيل قائمة "الحفظ" ، تظهر نافذة حفظ الملف ، ثم حدد الدليل وأدخل اسم الملف إلى حفظه. فيما يتعلق بمنطق الادخار ، يجب أن أتحدث عن الادخار هنا: في البداية ، كنت أفكر في كيفية تحديد ما إذا كان يتم حفظ المستند الحالي أو حفظه. في وقت لاحق ، لاحظت بعناية مفكرة سطح المكتب ووجدت أن مربع الحوار ظهر بحفظ وحفظ كما هو متماثل. تحتاج فقط إلى إحداث فرق طفيف لتحديد ما إذا كان سيتم حفظ أو حفظ كما هو على النحو التالي: إذا تم حفظه ، فهذا يعني وجود FileDir ، ويمكنك استدعاء الوظيفة المحفوظة مباشرة. إذا لم يكن Filedir موجودًا ، فهذا يعني أن الملف مفتوحًا حديثًا ولم يتم تحديد المسار بعد ، لذا قفز إلى النموذج.
أولاً ، حدد سلسلة متغيرة عالمية filedir = null ؛ قم بتعيينه إلى فارغ ، ولا يتم حفظ جميع الملفات افتراضيًا. بعد ذلك ، سواء كان ذلك لفتح الملف أو حفظه كملف ، يتم تسجيل الدليل الذي يوجد فيه الملف (بما في ذلك اسم الملف واسم لاحقة) في Filedir ، وأخيراً تحديد ما إذا كان Filedir فارغًا في حدث حفظ.
الرمز كما يلي:
void public save () { / *** حفظ ملف* / if (util.shell.filedir! = null) {// يعني أن الملف له دليل ويوفره مباشرة عند حفظه ، وليس هناك حاجة إلى pop-up util.shell.settext ((ملف جديد (util.shell.filedir.trim ()). // احصل على اسم الملف (باستثناء المسار) لتعيين العنوان filewriter filewriter ؛ Try {filewRiter = new filewriter (util.shell.filedir) ؛ BufferedWriter Out = New BufferedWriter (FilewRiter) ؛ out.write (util.shell.getText (). getText ()) ؛ out.close () ؛ filewriter.close () ؛ } catch (ioException e1) {e1.printStackTrace () ؛ }} else {// خلاف ذلك ، لا يتم حفظه أبدًا ، ثم حفظه كـ Window Saveas () ؛ }}4. أضف حدث الاستماع "فتح" القائمة
وصف الوظيفة: عند تشغيل قائمة "فتح" ، تظهر نافذة الملف المفتوح ، ثم حدد الملف المراد فتحه. من أجل إعادة استخدام الكود ، يتم تغليف طريقة الفتح في رمز الوظيفة على النحو التالي:
public void openfile () {if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {string tips = "file" + util.shell.filedir + "تم تغيير النص". /n "+" هل تريد حفظ الملف؟ "؛ int n = joptionpane.showConfirmDialog (null ، tips ،" notepad "، joptionpane.yes_no_cancel_option) ؛ if (n == 0) الملف وفتح الملف} آخر إذا (n == 1) {// return no} if (n == 2) {// return return ؛ Dialog.SetFilterExtensions (سلسلة جديدة [] {"*.txt" ، "*. الدليل الذي تم تحديده (بما في ذلك اسم الملف) if (= null) {return ؛ في = new BufferReader (fileReader) ؛ e1.printstacktrace () ؛5. أضف حدث الاستماع "الجديد"
وصف الوظيفة: عندما يتم تشغيل الحدث ، قم بإنشاء نافذة جديدة. إذا لم يتم حفظ الملف الحالي ، فسيتم مطالبته بحفظه ، وإلا فسيتم القفز على صفحة جديدة لإنشاءها.
مبدأ إنشاء صفحة جديدة: إعادة تخصيص العنوان ، وتهيئة FileDir ، وتهيئة مجال التحرير. هنا يمكنك استخراج الرمز لفتح الملف الجديد في طريقة ، وهو مناسب لاستدعاء الرمز على النحو التالي:
void openNewFile () {if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {سلسلة tips = "file" + util.shell.filedir + "تم تغيير النص". /n "+" هل تريد حفظ الملف؟ "؛ int n = joptionpane.showConfirmDialog (null ، tips ،" notepad "، joptionpane.yes_no_cancel_option) ؛ if (n == 0) ملف} آخر (n == 1) {// return no} if (n == 2) util.shell.filedir = null ؛4. إضافة وظيفة الاستماع الحدث (2) فئة التحرير
أضف وظيفة الاستماع للحدث لكل قائمة
1. أضف قائمة "وقت العرض" للاستماع إلى الأحداث
وصف الوظيفة: عندما يتم تشغيل الحدث ، سيتم عرض وقت النظام في المؤشر في مربع التحرير: الحصول على وقت النظام الحالي ، وتحويله إلى نوع سلسلة ، ثم اتصل بالطريقة text.append (STR) لعرض الوقت بعد مؤشر مربع التحرير.
1.1 أضف وظيفة الاستماع للحدث للحصول على طريقة الوقت الحالية للنظام: استدعاء كائن SimpledAteFormat لتنسيق الوقت ، ثم استدعاء تاريخ الحصول على الوقت.
المشكلة في البداية: لا يمكن إضافتها إلا إلى نهاية المحتوى في كل مرة. إذا كنت تفكر في الأمر بعناية ، فيجب عليك تحديد موقع المؤشر الحالي ، ثم قم بربط السلسلة قبل المؤشر + السلسلة بعد المؤشر ، ثم عرضه معًا.
لقد بحثت لفترة طويلة ووجدت أن getCaretposition () عادت للتو كبلاستيك ، والذي يجب أن يكون الشخص الذي يحصل على موضع المؤشر الحالي. جربته كما هو متوقع. التالي هو تنفيذ تقنية الربط السلسلة: s1.substring (0 ، index) + S2 + S1.SubString (index ، s1.length ()) ؛
تم إرجاع السلسلة الجديدة.
المشكلات التي تنشأ: بعد الربط ، يتم إنشاء الإخراج مباشرة ، مما يؤدي إلى تقسيم المحتوى السابق مع الأوتار الجديدة لاحقًا. بعد فترة طويلة من التغيير ، وجدت أنني بحاجة إلى استدعاء طريقة setText (سلسلة). قبل الإخراج ، امسح المحتوى المعروض في مربع التحرير السابق أولاً. محتوى وظيفة الاستماع النهائي هو كما يلي:
showdate.addselectionListener (selectionAdapter () { /*** أضف حدث الاستماع لقائمة "الوقت والتاريخ"* الوصف: توجيه هذه القائمة لإضافة وقت النظام الحالي إلى نهاية مؤشر مربع التحرير* / / / /يحصل على المتجول (selectevent e) {int index = getText (). Box // System.Out.println (index) ؛ getText (). setText ("")وظيفة سلسلة الربط هي كما يلي:
السلسلة العامة إدراج (السلسلة S1 ، السلسلة S2 ، int index) { / *** قم بتنفيذ وظيفة الإدراج للسلسلة* المعلمات الثلاثة التي تم تمريرها في هي: السلسلة الأصلية ، السلسلة المراد إدراجها ، وموضع الإدراج* تم إرجاعه هو السلسلة المدرجة* / return s1.substring (0 ، index) + s2 + s1.substring (indength ، s1. }2. أضف قائمة "SELECT All" للاستماع إلى الأحداث
الوصف الوظيفي: قم بتشغيل هذه القائمة لتحديد جميع سلاسل حقل النص
يأتي مربع التحرير في Java فعليًا مع وظيفة اختيار الكل. هاها ، يمكنك استدعاء text.selectall () مباشرة. تشير التقديرات إلى أن هناك أيضًا نسخ ولصق جاهز. لقد نسيت تقريبا. بعد تحديد كل شيء ، تحتاج إلى تحديد ما إذا كان المحتوى المحدد فارغًا. إذا لم يكن فارغًا ، فأنت بحاجة إلى تعيين أزرار "حذف" و "قطع" لتحديد جميع الرموز اختياريًا على النحو التالي:
selectall.addselectionListener (SelectionAdapter () { /*** أضف حدث الاستماع لقائمة "Select All" الوصف: توجيه القائمة لتحديد جميع النصوص في حقل النص ، وتعيين "DELETE" و "CUT" إلى CANTINAL* / /CLEAR إذا كانت () getText ()3. أضف حدث مراقبة القائمة "قطع"
الوصف الوظيفة: قم بتشغيل هذه القائمة ، أدرك رمز طريقة CUT () لمربع التحرير الذي يدعو مباشرة طريقة CUT () لمربع التحرير على النحو التالي:
cut.addselectionListener (SelectionAdapter () { / *** أضف حدث الاستماع لقائمة "CUT"* الوصف: توجيه هذه القائمة لقطع السلسلة المحددة* / public void widgetselected (SelectionEvent E) {getText (). cut () ؛}}) ؛4. إضافة حدث مراقبة القائمة "لصق"
الوصف الوظيفة: توجيه هذه القائمة ، وتنفيذ رمز طريقة Paste () الذي يدعو مباشرة مربع التحرير عن طريق لصق محتويات الحافظة على النحو التالي:
PASTE.AddSelectionListener (SelectionAdapter () { / *** أضف حدث الاستماع لقائمة "Paste"* الوصف: توجيه هذه القائمة على لصق المحتويات في الحافظة في مربع التحرير* / public void widgetselected (selectevent e) {getText (). paste () ؛}}) ؛5. أضف قائمة "النسخ" للاستماع إلى الأحداث
وصف الوظيفة: قم بإعداد هذه القائمة ، قم بتنفيذ رمز الطريقة للنسخ () الذي يتصل مباشرة بمربع التحرير عن طريق نسخ المحتويات المحددة على النحو التالي:
copy.adddselectionListener (SelectionAdapter () { / *** أضف حدث الاستماع لقائمة "CUT"* الوصف: توجيه هذه القائمة لقطع السلسلة المحددة* / public void widgetselected (SelectionEvent E) {text.copy () ؛}6. أضف حدث مراقبة القائمة "التراجع"
وصف الوظيفة: توجيه هذه القائمة ، التراجع عن العملية الحالية ، والتراجع عن الخوارزمية المتورطة في هذه الوظيفة معقدة. في الوقت الحالي ، لا يدعم هذا المفكرة طريقة التراجع عن الزر ، ولكنها تدعم النقر بزر الماوس الأيمن على التراجع (يأتي مكون نص Java معه عندما لا يتم كتابة النقر بزر الماوس الأيمن من قبلي ، هاها)
7. أضف قائمة "البحث" للاستماع إلى الأحداث
الوصف الوظيفي: توجيه هذه القائمة وأداء عملية البحث
find.addselectionListener (SelectionAdapter () جديد { / ** * مربع حوار لإضافة وظيفة بحث ، حيث تحتاج إلى النقر فوق البحث ، ثم يظهر مربع حوار ، أدخل المحتوى ذي الصلة من Search * / public void widgetselected (selectevent e) {findwindow fw = new findwindow (shlh ، swt.dialog_trim) ؛4. أضف وظيفة الاستماع للحدث (3) فئة مساعدة
بالإضافة إلى العديد من أحداث القائمة في شريط القائمة ، تحتاج أيضًا إلى الاستماع إلى أحداث لوحة المفاتيح. أي إذا قامت لوحة مفاتيح بتكوين حقل نصي ، فسيتم تشغيل عرض القائمة ذات الصلة: التراجع والبحث والعثور على المكان التالي ، واستبدل هذه القوائم الأربعة وتعيينها على اختياري
1. الاستماع إلى حقول النص
getText (). addKeyListener (New KeyAdapter () {/*** قم بتعيين أحداث الاستماع إلى لوحة المفاتيح* إذا كان لديك كتابة لوحة مفاتيح ، فأنت بحاجة إلى تعيين الأزرار ذات الصلة لتكون مرئية: التراجع ، والبحث ، والعثور على المكان التالي*/public void keyrelesexe (keyevent e) {if (getText (). find_next.setEnabled (true) ؛2. قم بتنفيذ وظيفة الاستماع للحدث لقائمة "الخط"
الرمز كما يلي:
setfont.adddselectionListener (new SelectionAdapter () { / *** قم بتعيين حدث الاستماع للخط* / public void widgetselected (selectevent e) {fontdialog fontdialog = new fontdialog (shell ، swt.none) ؛ font oldfont = getFont (). fontdialog.setfontlist (oldfont.getfontdata () ؛ if (oldfont! = null) {oldfont.dispose () ؛خمسة. إعدادات علامة النموذج
استخراج الوظيفة الرئيسية في فئة الاختبار ، وقم بتوضيح عنوان شكل المفكرة ، وقم بتمرير ملصق أولي إلى الوظيفة الرئيسية: "UNTALD STARTEPAD"
يتم تعريف مُنشئ المعلمة في فئة النماذج MAIN_WINDOW ، والمعلمات التي تم تمريرها هي مُنشئ اسم العنوان على النحو التالي:
main_window (سلسلة titlename) { / *** المعلمة التي تم تمريرها مع بنية المعلمة هي اسم الملف* / this.titlename = titlename ؛ } لاحظ أن: عنوان البرنامج هو: Untitled Notepad عند فتح ملف ، العنوان هو اسم الملف المفتوح. عند حفظ اسم الملف المحفوظ ، يكون العنوان هو اسم الملف المحفوظ. عند حفظ اسم الملف هو اسم الملف المحفوظ. طريقة الحصول على اسم الملف (لا تشمل المسار) هي:
shlnotepad.settext ((ملف جديد (filedir.trim ())). getName ()) ؛ // احصل على اسم الملف (باستثناء المسار) لتعيين العنوان
من أجل البساطة ، لقد اختصرها كرمز جملة
قم بتعيين أيقونة البرنامج ، ووضعه في دليل المشروع ، ويمكنك تقديمه مباشرة للاستخدام
التفكير: عند مطالبة المستخدم بما إذا كان يجب حفظه ، لا يمكنك فقط النظر إلى ما إذا كان المسار فارغًا. يجب عليك التحقق مما إذا كان قد تم الضغط على لوحة المفاتيح ، أي ، ما إذا كان هناك أي تغيير ، وما إذا كان المحتوى قد تغير (قد يكون النقر بزر الماوس الأيمن لحذفه مباشرة ولم يمر عبر لوحة المفاتيح)
6. تعريف مربعات الحوار الثلاثة الأخرى
1. ابحث عن مربع الحوار
انقر بزر الماوس الأيمن أيضًا على الحزمة التي تم إنشاؤها حديثًا جديدًا-> other> windowbuilder-> SWT Designer-> SWT->
النتائج كما يلي:
تتم مشاركة هذه النافذة هنا ، والبحث ، والاستبدال ، والبحث عن المكان التالي. يمكن أن يؤدي مربع تحرير محتوى البحث إلى النقر. مربع تحرير محتوى البحث ومربع الاستبدال ليسوا فارغين. يمكن تشغيل وظيفة الاستبدال. فيما يلي قائمة بالبحث في المكان التالي وجسم طريقة الاستبدال للبحث في المكان التالي:
IDEA: أولاً ، احصل على جميع الأوتار في النافذة الرئيسية ، ثم احصل على المحتوى الذي يجب البحث عنه ، واتصل مباشرة بوظيفة Search String التي توفرها Java للحصول على فهرس البدء ، ثم إضافة محتوى البحث إلى طول السلسلة التي يجب تقديمها ، ثم استدعاء وظيفة العرض في النافذة الرئيسية لتقديم السلسلة ثم عرضها.
الرمز المحدد كما يلي:
find_next.adddselectionListener (selectionAdapter () {override public void widgetselected (selectionevent e) {parestr = util.shell.gettext_1 () ؛ // // احصل على مربع النص الرئيسي في سلسلة index = index in index = index in index = index in index = exper joptionpane.showmessagedialog (null ، "غير موجود/" textContent.getText () index+textContent.getText (). length () ؛زر الاستبدال يحفز الحدث على النحو التالي ؛
replaceBTN.AddSelectionListener (SelectionAdapter () { /*** استبدال الحدث الزر* /public void widgetselected (selectionevent e) {parestr = util.shell.gettext_1 () util.shell.showtext (parester) ؛2. إنشاء مربع الحوار outauthor
إنشاء مربع الحوار هذا هو نفس مربع الحوار البحث. اسمه عن المؤلف. العروض المحددة هي كما يلي:
مربع الحوار هذا لا يتضمن خوارزميات ذات صلة. أضف ثلاث علامات Jlabel وأدخل ثلاث جمل.
3. إنشاء مربع الحوار GO_TO
لن أقول الكثير عن طريقة إنشاء مربع حوار. العروض المحددة هي كما يلي:
تطبيق الكود كما يلي:
Queding.addselectionListener (SelectionAdapter () { / *:استدعاء طريقة gotooneline () في النافذة الرئيسية
public void gotooneline (int row) {getText (). setSelection (row) ؛ }في هذه المرحلة ، تم الانتهاء من الوظائف العامة للجميع
7. ملخص
من بداية الكتابة إلى الانتهاء النهائي ، استغرق الأمر حوالي 2-3 أيام. لقد تعلمت الكثير من الخوارزميات ذات الصلة. برمجة Java مريحة للغاية. لا تحتاج العديد من الطرق إلى تنفيذها بنفسي. يمكنك فقط الاتصال بهم مباشرة. ومع ذلك ، Java لديها أيضا العديد من أوجه القصور. على سبيل المثال ، استخدمت مربع الحوار المملوك Java لإغلاق النافذة. وكانت النتيجة عالقة بشكل خاص. If you are interested, you can customize the exit dialog box. Just change the included three-choice dialog box to a custom dialog box. At the same time, the previous one was only for learning and did not consider the efficiency of the algorithm. For example, opening a file operation, it only implemented the function, but did not consider the timeliness of the algorithm. The method used in this example is to read the file by line. You can try to open a text document with thousands of lines by yourself, and you can feel the importance of the algorithm. Also, upward search has not been implemented. The preliminary idea is: find the coordinates that need to be found, and then start to go back from the position of the coordinates you are looking for, and invert the search content, and then call the string search function that comes with Java.
على سبيل المثال:
母串为“ab记事本def3g” 需要从”3”这个字符串开始向前查找”记事本”字符串,可将母串中”3”字符串所在位置之前的字符串”ab记事本def”完全倒置为”g3fed本事记ba” 将查找内容也倒置成”本事记” 再调用Java内带的字符串查找函数查找所在位置,再还原即可。
以上就是手把手编写记事本的详细步骤,Java基于SWT插件编写桌面记事本应用程序,希望对大家的学习有所帮助。