کنترل JButton

وقتی که بر روی کنترل Button کلیک می کنیم دستوراتی اجرا می شود، و این معمولترین استفاده ای است که از این کنترل می شود. دکمه ها به نوعی برای تایید یا لغو یک عمل و یا باز کردن کادرهای محاوره ای به کار می روند. سازنده این کلاس به صورت های زیر مقداردهی می شود :

JButton(َAction);
JButton(String);
JButton(Icon);
JButton(String, Icon);

کنترل Button دارای خواصی است که در جدول زیر تعدادی از این آنها ذکر شده است :

خواص توضیح
enabled اگر مقدار این خاصیت false باشد بر روی button نمی توان کلیک کرد.
text عنوانی است که به کنترل اختصاص داده می شود.
visible مشخص می کند که آیا کنترل button در روی فرم قابل رویت باشد یا نه

فقط با ویرایش خواص یک button نمی توان از آن استفاده کرد. بلکه کنترل دکمه برای انجام برخی اعمال نیاز به واکنش به رویدادها دارد. در زیر معمولترین رویدادهای کنترل button آمده است.

رویداد توضیح
actionPerformed وقتی روی می دهد که بر روی دکمه کلیک کنید.
mouseExited وقتی روی می دهد که ماوس کنترل را ترک کند.
stateChanged وقتی روی می دهد که مکان دکمه تغییر کند.
mousePressed وقتی روی می دهد که نشانگر ماوس بر روی کنترل باشد و دکمه ماوس رو به پایین فشار داده شود.
mouseEntered وقتی روی می دهد که ماوس وارد کنترل دکمه می شود.
mouseReleased وقتی روی می دهد که دکمه ماوس فشار داده شده و رها شود.

همانطور که قبلا مشاهده کردید رویداد پیشقرض کنترل دکمه رویداد actionPerformed می باشد. اجازه دهید که با ایجاد برنامه هایی با رویدادهای دیگر نیز آشنا شویم.می خواهیم برنامه ای بنویسیم که در آن وقتی که با ماوس بر روی یک دکمه رفتیم و یا نشانگر ماوس را از آن خارج کردیم متن داخل دکمه تغییر کند. به کد زیر توجه کنید :

   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("Button Demo");
   9:         frame1.setLayout(null);
  10:         final JButton button1 = new JButton("buttonSample");
  11:         
  12:         button1.setBounds(85, 80, 157, 60);
  13:         
  14:         MouseAdapter MouseAdapter1 = new MouseAdapter() 
  15:         {           
  16:             @Override
  17:             public void mouseEntered(MouseEvent evt) 
  18:             {
  19:                button1.setText("Mouse has entered!");
  20:             }
  21: 
  22:             @Override
  23:             public void mouseExited(MouseEvent evt) 
  24:             {
  25:                button1.setText("Mouse has Left!");
  26:             }
  27:         };
  28:         
  29:         button1.addMouseListener(MouseAdapter1);
  30:         
  31:         frame1.add(button1);
  32:         
  33:         frame1.setSize(356 , 263);
  34:         frame1.setVisible(true);          
  35:     }   
  36: }

در خط 8 و 9 یک فریم ایجاد کرده و هیچ لایه بندی برای آن در نظر نمی گیریم. در خط 10 یک دکمه ایجاد کرده و در خط 12 آن را نسبت به گوشه بالا و سمت چپ فریم تراز می کنیم. حال نوبت به قسمت مهم برنامه می رسد. همانطور که می دانید برای اینکه رویدادی اتفاق بیفتد باید یک Interface توسط یک کلاس پیاده سازی شود. کلاسی که قرار است رابط را پیاده سازی کند کلاس MouseAdapter است که سه رابط MouseWheelListener، MouseListener و MouseMotionListener را پیاده سازی می کند. در نتیجه این پیاده سازی باید کدهایی برای بدنه متدهای این رابط ها هم در نظر گرفته شود. چون ما با دو متد ()MouseEntered و ()MouseExited سر و کار داریم پس باید کدهای بدنه این دو متد را هم فراهم کنیم. پس در کل یک شی از کلاس MouseAdapter در خط 14 ایجاد کرده و در دو متد ()MouseEntered و ()MouseExited در خطوط 19 و 25 متن داخل دکمه را تغییر می دهیم. حال می خواهیم این شی را به دکمه بچسبانیم. این کار را با استفاده از متد ()addMouseListener در خط 29 انجام می دهیم. در خط 31 هم دکمه را به فریم اضافه می کنیم.
حال برنامه را اجرا کنید. مشاهده می کنید که با قرار گرفت اشاره گر ماوس بر روی کنترل button خاصیت text آن تغییر می کند. و از طرف دیگر وقتی که اشاره گر از کنترل دکمه دور می شود این خاصیت دوباره تغییر می کند.
button-in-swing-01
button-in-swing-02