کنترل JToggleButton

کنترل JToggleButton دکمه ای دو انتخابه یا دو حالته می باشد. این دکمه ها با کلیک بر روی آنها به حالت انتخاب در آمده و رنگ پس زمینه آنها تغییر می کند و اگر بخواهید آنها را از حالت انتخاب خارج کنید باید دوباره بر روی آنها کلیک کنید. یک نمونه از این نوع دکمه ها را در شکل زیر مشاهده می کنید :

JToggleButton-in-java-03

سازنده این کلاس به روش های زیر مقداردهی می شود :

public JToggleButton()
public JToggleButton(Icon icon)
public JToggleButton(Icon icon, boolean selected)
public JToggleButton(String text)
public JToggleButton(String text, boolean selected)
public JToggleButton(String text, Icon icon)
public JToggleButton(String text, Icon icon, boolean selected)
public JToggleButton(Action action)

برای درک بهتر عملکرد کنترل JToggleButton به مثال زیر توجه کنید :

   1: import java.awt.*;
   2: import javax.swing.*;
   3: import java.awt.event.*;
   4: 
   5: public class FrameDemo 
   6: {
   7:     public static void main(String[] args)
   8:     {
   9:         JFrame frame = new JFrame("JToggleButton Demo");
  10:        
  11:         JPanel panel = new JPanel();
  12:         
  13:         final JLabel label = new JLabel();
  14:         label.setPreferredSize(new Dimension(200, 200));
  15:         label.setBackground(Color.red);
  16:         label.setOpaque(true);
  17:         
  18:         JToggleButton toggleButton = new JToggleButton("Toggle Button");
  19:         
  20:         panel.add(label);
  21:         panel.add(toggleButton);
  22:         
  23:         frame.add(panel);
  24: 
  25:         class stateChange implements ItemListener 
  26:         {
  27:             public void itemStateChanged(ItemEvent itemEvent) 
  28:             {
  29:                 int state = itemEvent.getStateChange();
  30:                 
  31:                 if (state == ItemEvent.SELECTED) 
  32:                 {
  33:                     label.setSize(50, 50);
  34:                 } 
  35:                 else 
  36:                 {
  37:                     label.setSize(200, 200);
  38:                 }
  39:             }
  40:         }
  41:   
  42:         toggleButton.addItemListener(new stateChange());
  43:   
  44:         frame.setSize(500, 500);
  45:         frame.setVisible(true);    
  46:     }   
  47: }

هدف از برنامه بالا این است که با کلیک بر روی یک دکمه JToggleButton اندازه Label تغییر کرده و با کلیک دوباره به حالت قبل بر گردد. در خطوط 16-13 یک Label ایجاد کرده و یک اندازه و رنگ پس زمینه هم به آن اختصاص می دهیم. در خط 18 یک کنترل JToggleButton ایجاد کرده و این دو کنترل را در خطوط 20 و 21 به Panel و Panel را در خط 23 به Frame اضافه می کنیم. همانطور که اشاره کردیم این دکمه ها دو وضعیت (state) دارند : 1 – انتخاب شده 2- انتخاب نشده .
برای کار با این کنترل می توان رابط ItemListener را پیاده سازی کرد. در خط 40-25 یک کلاس با نام stateChanege ایجاد کرده و رابط مذکور را پیاده سازی می کنیم. این رابط دارای متدی به نام ()itemStateChanged که باید پیاده سازی شود. همانطور که در خط 27 مشاهده می کنید این متد یک شیء از کلاس ItemEvent در یافت می کند. کلاس ItemEvent دارای متدی به نام ()getStateChange که وضعیت دکمه را می توان با آن مشخص کرد. در خط 29 وضعیت دکمه را به دست می آوریم. در خطوط 38-31 با استفاده از یک دستور if چک می کنیم که آیا دکمه انتخاب شده است؟ اگر انتخاب شده باشد اندازه Label را تغییر داده و در غیر اینصورت به همان اندازه قبل که در خط 14 مشخص کرده ایم بر می گردانیم :
JToggleButton-in-java-02

JToggleButton-in-java-01

همانطور که در اشکال بالا مشاهده می کنید با انتخاب دکمه (شکل اول) رنگ پس زمینه JToggleButton تغییر می کند که نشان دهنده در حالت انتخاب بودن آن است و با کلیک دوباره بر روی آن یعنی خروج از حالت انتخاب رنگ پس زمینه به حالت عادی بر می گردد.