کلاس JRadioButton، نوعی از کلاس JToggleButton بوده که اغلب خواص کامپوننت JToggleButton را، دارا می باشد.

تفاوتی که بین JRadioButton و JCheckBox وجود دارد در این است که در یک ButtonGroup از JRadioButton فقط می توان یک مورد را انتخاب کرد ولی از JCheckBox می توان چندین مورد را انتخاب کرد . JRadioButton دارای 8 سازنده به شرح زیر است که می توان برای ایجاد یک JRadioButton از آن استفاده کرد.

public  JRadioButton()

JRadioButton radioButton = new JRadioButton ();

 

public  JRadioButton (Icon icon)

JRadioButton radioButton = new JRadioButton (new DiamondIcon(Color.RED , false));

radioButton.setSelectedIcon(new DiamondIcon(Color.PINK , true));

 

public  JRadioButton (Icon icon , boolean selected)

JRadioButton radioButton = new JRadioButton (new DiamondIcon(Color.PINK , false) , true);

radioButton.setSelectedIcon(new DiamondIcon(Color.PINK , true));

 

public  JRadioButton (String text)

JRadioButton radioButton = new JRadioButton ("Test radioButton ");

 

public JRadioButton (String text , boolean selected)

JRadioButton radioButton = new JRadioButton ("Test radioButton " , true);

 

 public  JRadioButton (String text , Icon icon)

JRadioButton radioButton = new JRadioButton ("Text radioButton ",new DiamondIcon(Color.PINK , false) , true);

radioButton.setSelectedIcon(new DiamondIcon(Color.PINK , true));

public  JRadioButton (String text , Icon icon , boolean selected)

JRadioButton radioButton = new JRadioButton ("Text radioButton " , new DiamondIcon(Color.PINK , false) , true);

radioButton.setSelectedIcon(new DiamondIcon(Color.PINK , true));

 

public  JRadioButton (Action action)

Action action = …;

JRadioButton radioButton = new JRadioButton (action);

استفاده از JRadioButton در ButtonGroup

JRadioButton جز آن دسته از کامپوننتهایی میباشد که می تواند در ButtonGroup قرار بگیرند و از درون ButtonGroup آن را کنترل کرد . برای ایجاد یک ButtonGroup از JRadioButton ها باید ابتدا یک کنترل ButtonGroup روی صفحه قرار داد شود و سپس JRadioButton ها را به آن اضافه کرد. مراحل انجام این کار به شرح زیر است :

1- ایجاد یک کامپوننت Panel برای قراردادن کامپوننتها در صفحه

JPabel pabel = new JPabel(new GridLayout(0,1));

2- تنظیم حاشیه (Border) و قرار دادن یک متن برای کامپوننت Panel (این مرحله اختیاری بوده و میتوانید آنرا انجام ندهید)

Border  border = BorderFactory.createTitledBorder("Select Language");

panel.setBorder(border);

3- ایجاد یک ButtonGroup

ButtonGroup buttonGroup = new ButtonGroup();

4- اضافه کردن چند کامپوننت JRadioButton به ButtonGroup

JRadioButton radioButton1 = new JRadioButton ("…");

panel.add(radioButton);

buttonGroup.add(radioButton1);

ایجاد ButtonGroup در NetBeans IDE

انجام مراحل فوق در NetBeans IDE به شرح زیر است :

1- ابتدا بک JFrame به برنامه اضافه کنید .

2- از پنجره Palette یک JPanel به JFrame اضافه کنید(در مورد JPanel در قسمت بعد توضیح داده خواهد شد)

3- بر روی JPanel کلیک راست کرده و گزینه Properties را انتخاب کنید.

4- خاصیت Border را انتخاب کرده و تا کادر محاوره مانند زیر به شما نشان داده شود .

1- گزینه TitledBorder را انتخاب کرده و از قسمت Properties عنوان (Title) آنرا Select Language بگذارید .

2- از پنجره Palette یک ButtonGroup را انتخاب کرده و  بر روی JPanel بکشید .

3- تعدادی JRadioButton را به JPanel اضافه کنید .

4- بر روی JRadioButton ها کلیک راست کرده و گزینه Properties را انتخاب کنید. از قسمت  Properties بر روی خاصیت ButtonGroup کلیک کرده و گزینه ButtonGroup که در مرحله قبل به JPanel اضافه کرده اید را انتخاب کنید(در این مثال نام ButtonGroup ما bgLanguage است). تصویر زیر مراحل انجام این کار را نشان میدهد.

5- پس از انجام مراحل فوق ButtonGroup شما باید بصورت زیر درآمده باشد.

پیدا کردن JRadioButton انتخاب شده در ButtonGroup

برای انجام این کار باید ابتدا  با استفاده از یک حلقه تمام JRadioButton های موجود در ButtonGroup را پیدا کرد و سپس با استفاده از متد getSelection کامپوننت JRadioButton انتخاب شده را به خروجی ارسال کرد .

در کد زیر ابتدا با استفاده از متد getElements تعداد عناصر موجود در ButtonGroup را پیدا  می کنیم (1).خروجی این متد یک آبجکت از نوع Enumeration است.

سپس با استفاده از متد hasMoreElements از آبجکت Enumeration در صورت وجود حداقل یک عنصر مراحل حلقه انجام می شود .  در داخل حلقه با استفاده از متد nextElements از آبجکت Enumeration به اولین عنصر دسترسی پیدا کرده و آنرا به آبجکت از نوع JRadioButton تبدیل می کنیم .(2)

در پایان با استفاده از متد getSelection از ButtonGroup متن JRadioButton انتخاب شده را در خروجی چاپ می کنیم .(3)

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        

        for(Enumeration e = bgLanguage.getElements() ; e.hasMoreElements() ;){ (1)

            JRadioButton b = (JRadioButton)e.nextElement(); (2)

            if(b.isSelected()){ (3)

                jLabel1.setText("You are Selected : " + b.getText());

            }

        }

    }

نکته: حلقه for دستورات بالا را میتوان با استفاده از حلقه While بصورت زیر دوباره نویسی کرد :

Enumeration e = bgLanguage.getElements();

while(e.hasMoreElements()){

    //....

}

انتخاب یک JRadioButton در درون ButtonGroup

 برای انجام اینکار، ButtonGroup دارای یک متد بنام setSelected(ButtonModel , boolean selected بوده که پارامتر اول آن یک ButtonModel است که باید با استفاده از متد getModel از JRadioButton آبجکت ButtonModel آنرا پیدا کرد، و پارامتر دوم یک آبجکت از نوع Boolean میباشد که حالت انتخاب و یا غیر انتخاب RadioButton را تعیین می کند . کد زیر نحوه انجام این کار را نشان می دهد .

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        

        bgLanguage.setSelected(jRadioButton1.getModel() , true);

    }

رویدادهای JRadioButton

رویدادهای JRadioButton همانند Listener های JToggleButton و JCheckBox بوده و در نحوه استفاده از آنها برای JRadioButton هیچ تفاوتی موجود نمی باشد. به علت اینکه در قسمتهای قبل به طور کامل به این Listener ها پرداختیم  ، دیگر آنها را در مورد JRadioButton توضیح نمی دهیم .

نکته: مراحل استفاده از JCheckBox در درون ButtonGroup شبیه استفاده JRadioButton در ButtonGroup است و هیچ تفاوتی بین آنها موجود نمی باشد .