کنترل JCheckBox در حقیقت یک کنترل Toggle بوده که فقط  دارای دو حالت Checked (انتخاب) و UnChecked (غیر انتخاب) دارد. این کنترل دارای 8 سازنده است که می توان برای ایجاد یک JCheckBox از آنها استفاده کرد.

public  JCheckBox()

JCheckBox checkBox = new JCheckBox();

 

public  JCheckBox(Icon icon)

JCheckBox checkBox = new JCheckBox(new DiamondIcon(Color.RED , false));

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

 

public  JCheckBox(Icon icon , boolean selected)

JCheckBox checkBox = new JCheckBox(new DiamondIcon(Color.PINK , false) , true);

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

 

public  JCheckBox(String text)

JCheckBox checkBox = new JCheckBox("Test CheckBox");

 

public JCheckBox(String text , boolean selected)

JCheckBox checkBox = new JCheckBox("Test CheckBox" , true);

 

public  JCheckBox(String text , Icon icon)

JCheckBox checkBox = new JCheckBox("Text CheckBox",new DiamondIcon(Color.PINK , false) , true);

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

 

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

JCheckBox checkBox = new JCheckBox("Text CheckBox" , new DiamondIcon(Color.PINK , false) , true);

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

 

public  JCheckBox(Action action)

Action action = …;

JCheckBox checkBox = new JCheckBox(action);

رویدادهای JCheckBox

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

رویداد ActionListener

آبجکت ActionEvent هنگامی توسط ActionListener مقدار دهی می شود که وضعیت JCheckBox تغییر کند و همانند JToggleButton فقط میتواند حالت انتخاب و یا انتخاب نبودن را به ما گزارش دهد. برای مشخص کردن وضعیت JCheckBox  باید با استفاده از AbstractButton ، منبع اصلی ارسالی ActionEvent یا کنترلی که ActionListener را فراخوانی کرده ،گرفته شده و سپس با استفاده از متد isSelected وضعیتهای آن بررسی شود. در کد زیر اگر JCheckBox انتخاب شده باشد با استفاده از متد setText متن آن به SELECTED_LABEL تغییر پیدا می کند و اگر انتخاب نشده باشد متن آن به DESELECTED_LABEL تغییر پیدا می کند.

ActionListener actionListener = new ActionListener(){

                public void actionPerformed(ActionEvent actionEvent){

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

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

                                String newLabel = (selected ? "SELECTED_LABEL" : "DESELECTED_LABEL");

                                abstarctButton.setText(newLabel);

                }

};

رویداد ItemListener

همانند JToggleButton رویداد ItemListener برای JCheckBox قابلیتهای بیشتری بدون نیاز به استفاده از AbstractButton فراهم می کند. آبجکت ItemEvent ارسال شده به متد itemStateChanged شامل وضعیت فعلی JCheckBox میباشد. در کد زیر رنگ زمینه و رنگ قلم JCheckBox را بر اساس حالت انتخاب فقط در حالت Selected  آن تغییر می دهیم . در کد زیر متد getStateChanged وضعیت JCheckBox را تعیین می کند که می تواند SELECTED و یا DESELECTED باشد .

ItemListener itemListener = new ItemListener(){

                public void itemStateChanged(ItemEvent evt){

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

                                Color foreground = abstarctButton.getForeground();

                                Color background = abstarctButton.getBackground();

 

                                int state = evt.getStateChange();

                                if(state == evt.SELECTED) {

                                                abstractButton.setForeground(background);

                                                abstractButton.setBackground(foreground);

                                }

                }

};

رویداد ChangeListener

همانطور که رویداد ChangeListener در کامپوننت JToggleButton برای تشخیص وضعیتهای  armed ، selected ، pressed و released مورد استفاده قرار میگیرد، در این کامپوننت نیز به همین صورت میباشد. همچنین ChangeListener به رویدادهای تغییر ButtonModel مانند تغییر کلید برای Mnemonic (KeyEvent.VK_S در مورد JCheckBox نیز توجه می کند . به علت اینکه هیچ تفاوتی بین نحوه استفاده از ChangeListener در JCheckBox و JToggleButton وجود ندارد ، همان مثال قسمت قبل را می توان در مورد آن استفاده کرد. تصویر زیر نحوه استفاده از 3 Listener فوق را نشان می دهد.