کنترل کننده رویداد
Swing از مکانیزم کنترل کننده رویداد (Event Handler)، برای کنترل رویدادهایی که در هنگام اجرای برنامه به وقوع میپیوندند، استفاده میکند. رویدادها، رفتارهایی یا اتفاقاتی هستند که، هنگام اجرای برنامه به وقوع میپیوندند. کنترل رویداد فرایند نظارت بر وقوع یک رویداد مشخص میباشد. فرمهای ویندوزی از کنترل کننده رویداد برای اضافه کردن یک قابلیت و پاسخ به کاربر استفاده میکنند. بدون کنترل کننده رویداد، فرمها و رابط گرافیکی تا حد زیادی بدون استفاده هستند. کنترل رویداد در Swing دارای سه جزء است :
- رویداد (Event) : یک رویداد، تغییر حالت یک شیء (مثلاً یک جعبه متن) است .
- منبع رویداد (Event Source) : شیئی است که رویداد را تولید میکند (مثلاً دکمهای که رویداد کلیک را تولید میکند).
- شنونده رویداد (Event Listener) : اینترفیسی است که منتظر وقوع رویداد است.
مکانیسم کنترل رویداد در جاوا به این صورت است :
در جدول زیر کلاسهای رویداد، اینترفیس ها و متدهای این اینترفیس ها که در کنترل رویدادها به کار برده میشوند. این کلاسها و اینترفیس ها در پکیجهای java.util، java.awt و java.awt.event قرار دارند.
شنونده رویداد | متدهای شنونده رویداد | کلاس رویداد | متد اضافه کننده |
ActionListener | actionPerformed | ActionEvent | addActionListener |
AdjustmentListener | adjustmentValueChanged | AdjustmentEvent | addAdjustmentListener |
ComponentListener | componentHidden | ComponentEvent | addComponentListener |
componentMoved | |||
componentResized | |||
componentShown | |||
ContainerListener | componentAdded | ContainerEvent | addContainerListener |
componentRemoved | |||
FocusListener | focusGained | FocusEvent | addFocusListener |
focusLost | |||
ItemListener | itemStateChanged | ItemEvent | addItemListener |
KeyListener | keyPressed | KeyEvent | addKeyListener |
keyReleased | |||
keyTyped | |||
MouseListener | mouseClicked | MouseEvent | addMouseListener |
mouseEntered | |||
mouseExited | |||
mousePressed | |||
mouseReleased | |||
MouseMotionListener | mouseDragged | MouseEvent | addMouseMotionListener |
mouseMoved | |||
TextListener | textValueChanged | TextEvent | addTextListener |
WindowListener | windowActivated | WindowEvent | addWindowListener |
windowClosed | |||
windowClosing | |||
windowDeactivated | |||
windowDeiconified | |||
windowIconified | |||
windowOpened |
به ستون آخر سمت چپ جدول بالا توجه کنید. همانطور که در ابتدای درس اشاره کردیم بعد از پیاده سازی شنونده توسط یک کلاس باید آن کلاس را به کنترل مورد نظرمان وصل کنیم این کار را با متدهایی انجام میدهیم که اسم آنها با کلمه add شروع میشود که در جدول بالا و در ستون (متد اضافه کننده) نام این متدها ذکر شده است. به علت کمبود فضا در جدول بالا در جداول زیر کاربرد کلاسهای رویداد و متدها (ستون دوم و سوم) آمده است :
متد | توضیح |
actionPerformed | وقتی یک رویداد اکشن اتفاق می افتد فراخوانی میشود |
adjustmentValueChanged | |
componentHidden | وقتی که یک کنترل مخفی شود فراخوانی میشود |
componentMoved | وقتی که یک کنترل حرکت کند فراخوانی میشود |
componentResized | وقتی که اندازه یک کنترل تغییر کند فراخوانی میشود |
componentShown | وقتی که یک کنترل نمایش داده شود فراخوانی میشود |
componentAdded | وقتی که یک کنترل اضافه شود فراخوانی میشود |
componentRemoved | وقتی که یک کنترل حذف شود فراخوانی میشود |
focusGained | وقتی کنترل فوکوس میگیرد فراخوانی میشود |
focusLost | وقتی کنترل فوکوس از دست میدهد فراخوانی میشود |
itemStateChanged | وقتی آیتم انتخاب شده تغییر میکند فراخوانی میشود |
keyPressed | وقتی کاربر یک کلید را فشار میدهد فراخوانی میشود |
keyReleased | وقتی کاربر کلید را آزاد میکند فراخوانی میشود |
keyTyped | وقتی کاربر کلید را فشرده و سپس رها میکند فراخوانی میشود |
mouseClicked | وقتی کاربر با ماوس کلیک میکند فراخوانی میشود |
mouseEntered | وقتی کاربر با ماوس روی یک کنترل میکند رود فراخوانی میشود |
mouseExited | وقتی ماوس از محدود یک کنترل خارج میشود فراخوانی میشود |
mousePressed | وقتی کاربر دکمه ماوس را فشار میدهد فراخوانی میشود |
mouseReleased | وقتی کاربر دکمه ماوس را رها میکند فراخوانی میشود |
mouseDragged | وقتی با ماوس یک کنترل را Drag میکنید فراخوانی میشود |
mouseMoved | وقتی نشانگر ماوس جابجا شود فراخوانی میشود |
textValueChanged | وقتی مقدار متن کنترل تغییر کند فراخوانی میشود |
windowActivated | هنگام فعال شدن پنجره فراخوانی میشود. |
windowClosed | هنگام بسته شدن پنجره فراخوانی میشود |
windowClosing | وقتی پنجره در حال بسته شدن است فراخوانی میشود |
windowDeactivated | وقتی پنجره غیر فعال میشود فراخوانی میشود |
windowDeiconified | وقتی پنجره از حال آیکون به حالت عادی تغییر میکند فراخوانی میشود |
windowIconified | وقتی پنجره مینیمایز میشود فراخوانی میشود |
windowOpened | وقتی پنجره باز میشود فراخوانی میشود |
کلاس رویداد | توضیحات |
ActionEvent | وقتی تولید میشود که بر روی یک دکمه کلیک، یک آیتم انتخاب و یا بر روی لیست آیتم کلیک شود. |
MouseEvent | وقتی تولید میشود که ماوس Drag یا کلیک شود و یا از یک کنترل خارج و یا وارد یک کنترل شود. |
KeyEvent | وقتی تولید میشود که یک دکمه از صفحه کلید توسط کاربر فشرده شود. |
ItemEvent | وقتی تولید میشود که check-box یا list item کلیک شود. |
TextEvent | وقتی تولید میشود که مقدار textarea یا textfield تغییر کند. |
MouseWheelEvent | وقتی تولید میشود کهدکمه وسط ماوس حرکت داده شود. |
WindowEvent | وقتی تولید میشود که پنجره فعال، غیرفعال، بسته و … شود. |
ComponentEvent | وقتی تولید میشود که یک کنترل مخفی شود، حرکت کند، اندازهاش تغییر کند. |
ContainerEvent | وقتی تولید میشود که یک کنترل به پنجره اضافه و یا از آن حذف شود. |
AdjustmentEvent | وقتی تولید میشود که اسکرول تغییر کند. |
FocusEvent | وقتی تولید میشود که یک کنترل فوکوس گرفته و یا فوکوس خود را از دست بدهد. |
برای درک بهتر کنترل رویداد (Event handling) به یک مثال توجه کنید. فرض کنید که میخواهیم وقتی بر روی یک دکمه کلیک شد یک پیام نمایش داده شود. برنامه NotePad را باز کرده و کدهای زیر را در داخل آن نوشته و سپس با نام FrameDemo ذخیره کنید :
1: import javax.swing.*; 2: import java.awt.event.*; 3: 4: public class FrameDemo 5: { 6: public static void main(String[] args) 7: { 8: JFrame frame1 = new JFrame("Event Handling in JAVA"); 9: frame1.setSize(356 , 263); 10: frame1.setVisible(true); 11: 12: JButton button1 = new JButton("Click Me!"); 13: frame1.add(button1); 14: 15: class ListenToClick implements ActionListener //Step 1 16: { 17: @Override 18: public void actionPerformed(ActionEvent e) 19: { 20: JOptionPane.showMessageDialog(null, "Hello world!"); //Step 2 21: } 22: } 23: 24: button1.addActionListener(new ListenToClick()); //Step 3 25: } 26: }
در مثال بالا چون ما قرار است از کنترلهای Swing استفاده و همچنین رویدادها را کنترل کنیم ابتدا کلاسها و پکیجهای مربوطه را در خطوط 1 و 2 اضافه میکنیم. سپس در خطوط 13-8 یک فریم ایجاد و یک دکمه به آن اضافه میکنیم. در درسهای بعد در مورد این دو کنترل و همچنین این کدها بیشتر توضیح میدهیم.
حال نوبت به سه مرحلهای میرسد که در ابتدای درس توضیح دادیم :
حال برنامه را اجرا کرده و با کلیک بر روی دکمه نتیجه را مشاهده نمایید :
خطوط 24-15 کد بالا را به دو صورت زیر هم میتوان نوشت :
ActionListener ListenToClick = new ActionListener() //Step 1 { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Hello world!"); //Step 2 } }; button1.addActionListener(ListenToClick); //Step 3
یا به صورت خلاصهتر زیر :
button1.addActionListener(new ActionListener() //Step 1 , Step3 { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Hello world!"); //Step 2 } });
در آخر این نکته را یادآور میشوم که ما در مثال بالا برخی از موارد مانند تعیین اندازه و محل قرار کیری دکمه و … را توضیح ندادهایم تا شما اصل مطلب که همان کنترل رویداد است را یاد بگیرید. در درسهای آینده در مورد کنترلهای Swing بیشتر توضیح میدهیم.