الوحدة 7: الواجهات الرسومية وقواعد البيانات · الموضوع 15 من 17
الموضوع 15

واجهة المستخدم الرسومية Java GUI

نتعرّف على واجهات المستخدم الرسومية ومكتبة Swing، ونبني نافذة بالسحب والإفلات في NetBeans دون كتابة كود التصميم.

JFrame الاسم:JTextField ترحيبJButton مرحبًا أحمدJLabel
بعد هذا الدرس ستستطيع أن:
  • تميّز بين الواجهة النصية CLI والواجهة الرسومية GUI.
  • تذكر أهم مكوّنات مكتبة Swing ووظيفة كل منها.
  • تُنشئ نافذة JFrame Form في NetBeans بالسحب والإفلات.
  • تبرمج حدث الضغط على زر بالنقر المزدوج عليه.

١ما المقصود بواجهة المستخدم؟

الجزء من البرنامج الذي يتعامل معه المستخدم مباشرة، وهي نوعان:

⌨️ نصّية CLIأوامر في سطر الأوامر، كما في برامجنا السابقة.
🖱️ رسومية GUIنوافذ وأزرار وقوائم ومربعات نص وأيقونات، تُستخدم بطريقة مرئية سهلة.

٢مكتبة Swing

مكتبة رسومية في جافا لإنشاء واجهات المستخدم، وهي امتداد لمكتبة AWT لكنها أكثر تطورًا ومرونة، وتوفّر كلاسات لبناء واجهات مستقلة عن نظام التشغيل.

الكلاسالوظيفة
JFrameنافذة رئيسية للتطبيق
JLabelعرض نص أو صورة ثابتة لا يعدّلها المستخدم
JButtonزر يمكن الضغط عليه
JTextFieldإدخال نص من المستخدم
JPanelحاوية لترتيب المكوّنات داخلها
JCheckBoxمربع اختيار
JRadioButtonزر اختيار من مجموعة
JComboBoxقائمة منسدلة
JOptionPaneرسائل منبثقة

لوحة المكوّنات Palette في NetBeans

Swing ContainersPanel، Scroll Pane، Tabbed Pane…
Swing ControlsLabel، Button، Text Field، Check Box، Radio Button، Combo Box، Text Area…
Swing MenusMenu Bar، Menu، Menu Item…
Swing WindowsDialog، Frame، Option Pane…

٣النافذة JFrame

الكلاس الأساسي لإنشاء نافذة في Swing، وتُعرض فيها مكوّنات الواجهة. ننشئها في NetBeans: زر أيمن على الحزمة‏ ← ‏New‏ ← ‏JFrame Form.

للاطلاع: إنشاء نافذة بالكود

Main.java
import javax.swing.JFrame;public class Main {    public static void main(String[] args) {        // إنشاء نافذة (كائن من JFrame)        JFrame frame = new JFrame("نافذة تجريبية");         // تحديد حجم النافذة        frame.setSize(400, 300);         // تحديد الإجراء عند إغلاق النافذة        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         // لتحديد مكان ظهور النافذة على الشاشة عند تشغيل التطبيق        // عرض في منتصف شاشة المستخدم بالضبط        frame.setLocationRelativeTo(null);        // جعل النافذة مرئية        frame.setVisible(true);    }}
☕ نافذة تجريبية— ▢ ✕

٤JPanel و JLabel

FlowLayoutالمكوّنات متتالية في سطر، وتنتقل للسطر التالي عند امتلائه.
BorderLayoutخمس مناطق: شمال وجنوب وشرق وغرب ووسط.
GridLayoutشبكة صفوف وأعمدة متساوية.

٥مثال: نافذة الترحيب بالسحب والإفلات

  1. أنشئ النموذج: زر أيمن على الحزمة‏ ← ‏New‏ ← ‏JFrame Form، واكتب اسمًا مثل GreetingForm.
  2. اسحب المكوّنات: من Palette اسحب: Label للنص «الاسم:»، و Text Field، و Button، و Label ثانية للنتيجة.
  3. غيّر النصوص: حدّد كل مكوّن، ومن Properties غيّر text: «ترحيب» للزر، وامسح نص الحقل.
  4. برمج الحدث: انقر نقرًا مزدوجًا على الزر، فيفتح NetBeans الدالة jButton1ActionPerformed؛ اكتب فيها سطرين فقط.
  5. شغّل: Run File (Shift+F6).

الكود الوحيد الذي تكتبه (داخل الدالة التي يولّدها NetBeans):

GreetingForm.java
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {    String name = jTextField1.getText();    jLabel2.setText("مرحبًا " + name);}

جرّبها هنا: نسخة تفاعلية تحاكي النافذة.

☕ تطبيق الترحيب— ▢ ✕
الاسم:
اكتب اسمك ثم اضغط الزر

٦مشروع عملي خطوة بخطوة: محوّل درجات الحرارة

نبني تطبيقًا صغيرًا: يكتب المستخدم درجة الحرارة بالمئوي Celsius، ويضغط زر Convert، فتظهر الدرجة بالفهرنهايت Fahrenheit. نبنيه بالسحب والإفلات على مرحلتين: تصميم الواجهة، ثم برمجة الزر.

☕ Celsius Converter— ▢ ✕
CelsiusFahrenheit

جرّب النافذة أعلاه: هذا ما ستبنيه في NetBeans.

١) إنشاء المشروع والنافذة

  1. File‏ ← ‏New Project‏ ← ‏Java with Ant‏ ← ‏Java Application‏ ← ‏Next.
  2. اكتب اسم المشروع CelsiusConverterProject، وألغِ تحديد Create Main Class، لأن النافذة نفسها ستكون نقطة تشغيل البرنامج، ثم Finish.
  3. في نافذة Projects افتح Source Packages، ثم زر أيمن على <default package>‏ ← ‏New‏ ← ‏JFrame Form.
  4. اكتب اسم الكلاس CelsiusConverterGUI، ثم Finish. إن تركت خانة Package فارغة يظهر تحذير لا يمنع العمل؛ والأفضل في مشاريعك كتابة اسم حزمة. تظهر النافذة فارغة في وضع التصميم Design.
إنشاء مشروع Java Application
إنشاء مشروع Java Application
اسم المشروع مع إلغاء Create Main Class
اسم المشروع مع إلغاء Create Main Class
New‏ ← ‏JFrame Form
New‏ ← ‏JFrame Form
اسم النافذة CelsiusConverterGUI
اسم النافذة CelsiusConverterGUI

٢) تعرّف على أجزاء شاشة التصميم

  1. Palette (لوحة المكوّنات): فيها مكوّنات Swing؛ سنستخدم منها JLabel و JTextField و JButton.
  2. Design Area (منطقة التصميم): النافذة التي تسحب إليها المكوّنات. أعلاها تبويبان: Design للتصميم، و Source لرؤية الكود المولَّد.
  3. Properties (الخصائص): تغيّر منها خصائص المكوّن المحدد، مثل النص والخط واللون.
  4. Navigator (المستكشف): قائمة بكل مكوّنات النافذة وأسماء متغيراتها.
شاشة التصميم: Palette و Design و Properties و Navigator
شاشة التصميم: Palette و Design و Properties و Navigator

٣) بناء الواجهة بالسحب والإفلات

  1. حدّد النافذة JFrame، ومن Properties غيّر title إلى: Celsius Converter.
  2. اسحب Text Field إلى أعلى يسار النافذة. تظهر خطوط إرشادية متقطعة تساعدك على المحاذاة.
  3. اسحب Label وضعه يمين الحقل على السطر نفسه.
  4. اسحب Button وضعه أسفل الحقل.
  5. اسحب Label ثانية وضعها يمين الزر.
تغيير عنوان النافذة من Properties
تغيير عنوان النافذة من Properties
الخطوط الإرشادية أثناء سحب المكوّن
الخطوط الإرشادية أثناء سحب المكوّن
المكوّنات الأربعة بعد سحبها
المكوّنات الأربعة بعد سحبها

٤) ضبط الواجهة

  1. انقر نقرًا مزدوجًا على كل مكوّن لتغيير نصه: امسح نص الحقل، واجعل الزر Convert، والتسمية الأولى Celsius، والثانية Fahrenheit.
  2. حدّد الحقل والزر معًا (Shift مع النقر)، ثم زر أيمن‏ ← ‏Same Size‏ ← ‏Same Width ليصبحا بالعرض نفسه.
  3. اسحب الزاوية السفلية اليمنى للنافذة لإزالة المساحة الفارغة، مع ترك مسافة بسيطة ليظهر العنوان كاملًا.
  4. لتظهر النافذة في وسط الشاشة عند التشغيل: حدّد JFrame، ومن Properties افتح تبويب Code وفعّل Generate Center.
بعد تغيير النصوص
بعد تغيير النصوص
Same Size‏ ← ‏Same Width
Same Size‏ ← ‏Same Width
Properties‏ ← ‏Code‏ ← ‏Generate Center
Properties‏ ← ‏Code‏ ← ‏Generate Center

٥) برمجة الزر

  1. غيّر أسماء المتغيرات إلى أسماء مفهومة: في Navigator زر أيمن على كل مكوّن‏ ← ‏Change Variable Name. الأسماء: tempTextField و celsiusLabel و convertButton و fahrenheitLabel.
  2. زر أيمن على زر Convert‏ ← ‏Events‏ ← ‏Action‏ ← ‏actionPerformed (أو انقر عليه نقرًا مزدوجًا). يفتح NetBeans الدالة convertButtonActionPerformed فارغة.
  3. اكتب داخلها كود التحويل التالي:
الأسماء الافتراضية قبل التغيير
الأسماء الافتراضية قبل التغيير
الأسماء الجديدة بعد التغيير
الأسماء الجديدة بعد التغيير
Events‏ ← ‏Action‏ ← ‏actionPerformed
Events‏ ← ‏Action‏ ← ‏actionPerformed
CelsiusConverterGUI.java
private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {    //Parse degrees Celsius as a double and convert to Fahrenheit.    int tempFahr = (int) ((Double.parseDouble(tempTextField.getText()))            * 1.8 + 32);    fahrenheitLabel.setText(tempFahr + " Fahrenheit");}
كود التحويل داخل convertButtonActionPerformed
كود التحويل داخل convertButtonActionPerformed

٦) التشغيل

  1. Run‏ ← ‏Run Project (أو F6). في أول تشغيل يسألك NetBeans عن الكلاس الرئيسي: اختر CelsiusConverterGUI ثم OK.
  2. اكتب 40 واضغط Convert، فيظهر: 104 Fahrenheit.
التطبيق أثناء التشغيل
التطبيق أثناء التشغيل

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

الواجهة التي فيها نوافذ وأزرار:

الكلاس الذي يمثّل النافذة الرئيسية:

لعرض نص ثابت لا يعدّله المستخدم:

كيف نبرمج ما يحدث عند ضغط زر في NetBeans؟

الخلاصة

انتقل إلى تقييم الدرسأسئلة التقييم، وأكمل الفراغات.ابدأ التقييم ←