JToggleButton اولین کنترل toggleable ایی که به آن می پردازیم. این کلاس به عنوان کلاس پدر برای کامپوننتهای JCheckBox و JRadioButton محسوب شده به همین خاطر قبل از آنها، به معرفی این کامپوننت می پردازیم. JToggleButton از نظر عملکرد شبیه JButton میباشد با این تفاوت که می تواند در حالت فشار داده شده یا Press قرار گیرد. کاربرد  JToggleButton  در برنامه های خیلی کم است و عموما در Toolbar های برنامه های مانند Microsoft Word از آن استفاده می شود.

ایجاد JToggleButton

کامپوننت JToggleButton دارای سازنده های متعددی میباشد که در زیر به ذکر چندتا از آنها اکتفا خواهیم نمود :

  • public  JToggleButton()
  • JToggleButton toggleButton = new JToggleButton();

public  JToggleButton(Icon icon)

  • JToggleButton toggleButton = new JToggleButton(new DiamondICon(Color.PINK));
  • public  JToggleButton(Icon icon , boolean selected)
  • JToggleButton toggleButton = new JToggleButton(new DiamondICon(Color.PINK) , true);
  • public  JToggleButton(String text)
  • JToggleButton toggleButton = new JToggleButton("Test ToggleButton");

public  JToggleButton(Action action)

Action action = …. ;

JToggleButton toggleButton = new JToggleButton(action);

در JToggleButton می توان 3 خواص عمده آنرا که شامل Text و Icon و Selected است را با استفاده از متدهای Accessors یا متدهای get/set در برنامه مقدار دهی کرد. به عنوان مثال برای تغییر متن  از متدهای get/setText و برای تغییر آیکون get/setICon و برای تعیین حالت انتخاب از متدهای is/setSelected استفاده کرد . سایر خواص JToggleButton بسیار شبیه JButton بوده و تفاوت های اساسی زیادی با هم ندارند.

رویدادهای JToggleButton

رویدادهای JToggleButton و یا Listener های آن به 3 دسته ActionListener ، ItemListener ، ChageListener تقسیم می شوند که در زیر به شرح هر یک خواهیم پرداخت.

رویداد ActionListener

اگر شما نیاز دارید که بدانید چه زمانی کاربر JToggleButton را انتخاب کرده و یا آنرا از حالت انتخاب خارج کرده است باید یک ActionListener را به کنترل JToggleButton اضافه کنید. با این کار بعد از اینکه کاربر JToggleBUtton را کلیک کرد رویداد مربوط به ActionListener فراخوانی می شود . متاسفانه در جاوا این امکان وجود ندارد که بتوان بطور مستقیم حالت JToggleButton را مانند Selected و یا deSelected تشخیص داد ، برای این کار باید باید از کلاس AbstractButton که در قسمتهای بعد به آن خواهیم پرداخت ، استفاده کرد. در کد زیر یک ActionListener تعریف شده که در هنگام کلیک کردن روی JToggleButton اگر در حالت Selected باشد پیغامی به کاربر نشان خواهد داد.

ActionListener actionListener = new ActionListener (){

                public void actionPerformed(ActionEvent actionEvent){

                                AbstractButton abstractButton = (AbstractButton) actionEvent.getSource(); (1)

                                boolean selected = abstractButton.getModel().isSelected();

                                System.out.println("Action – Selected is " + selected + "\n");

                }

};

در خط (1) ابتدا به وسیله متد getSource از actionEvent ، JToggleButton را گرفته و سپس آنرا به یک کلاس AbstractButton تبدیل کردیم و با استفاده از متد isSelected حالت انتخاب یا Selected بودن کامپوننت بررسی میگردد. با استفاده از Listener فوق اگر JToggleButton در حالت پائین ویا فشار داده شده باشد و روی آن کلیک شود خروجی به صورت "Action – Selected is false" خواهد بود و اگر در حالت Selected نباشد خروجی به صورت "Action – Selected is true" خواهد بود.

برای اضافه کردن Listener فوق به یک JToggleButton در NetBeans بر روی JToggleButton کلیک راست کرده و گزینه Events→ Action→actionPerformed را انتخاب کنید.

رویداد ItemListener

یکی از بهترین رویدادها برای بررسی حالت های Select و یا Deselect بودن کامپوننت JToggleButton استفاده از ItemListener است . آبجکت ItemEvent که به متد itemStateChanged  ارسال می شود شامل وضعیتهای Selected و DeSelected میباشد. در کد زیر نحوه استفاده از ItemListener در حالت های Selected و DeSelected از JToggleButton نشان داده شده است.

ItemListener itemListener = new ItemListener(){

                public void itemStateChanged(ItemEvent itemEvent){

                                int state = itemEvent.getStateChange();

                                if(state == evt.SELECTED) {

                                                System.out.println("Action Selected is Selected ");

                                } else {

                                                System.out.println("Action Selected is Deselected ");

                                }

                }

};

برای اضافه کردن ItemListener به JToggleButton در محیط NetBeans بر روی JToggleButton کلیک راست کرده و گزینه Events→Item→itemStateChanged را انتخاب کنید .

رویداد ChangeListener

اضافه کردن یک ChangeListener به JToggleButton قابلیتهای زیادی مانند بررسی حالتهای Selected ، Pressed و یا Armed را در اختیار شما می گذارد. در حقیقت یک ChangeListener وظیفه ItemListener و یا ActionListener را می تواند انجام دهد. برای استفاده از ChangeListener باید ابتدا کامپوننت JtoggleButton به صورت یک آبجکت از کلاس AbstractButton تبدیل شده و سپس با متدهای موجود ، وضعیتهای آن کنترل شود. کد زیر نحوه استفاده از ChangeListener را نشان می دهد.

ChangeListener  changeListener = new ChangeListener(){

                public void stateChanged(ChangeEvent changeEvent){

                                AbstractButton  abstractButton = (AbstractButton) changeEvent.getSource();

                                ButtonModel buttonModel = abstractButton.getModel();

                               

                                boolean armed = buttonModel.isArmed();

                                boolean pressed = buttonModel.isPressed();

                                boolean selected = buttonModel.isSelected();

 

                                System.out.println("Change : " + armed + "/" + pressed + "/" + selected);

                }

};

خروجی دستورات فوق بعد از اینکه Listener فوق به JToggleButton اضافه شده و کنترل JToggleButton فشارداده شد (Pressed) و ماوس از روی آن برداشته شده بصورت زیر میباشد:

Changed : true/false/true

Changed : true/true/false

Changed : true/true/true

Changed : true/false/true

Changed : false/false/true

برای اضافه کردن یک ChangeListener به JToggleButton در محیط NetBeans بر روی JToggleButton کلیک راست کرده و گزینه Events→Change→stateChange را انتخاب کنید.