CheckboxMenuItem added to dock fires itemevent returning String rather than CheckboxMenuItem

Paul Taylor paul_t100 at fastmail.fm
Wed Nov 20 02:05:47 PST 2013


On OSX Java 7 (1.7.0_40) I wanted to add some mutually exclusive 
CheckBoxItems to the dock menu, in order to create the mutual 
exclusivity I  used the answer here by 
http://stackoverflow.com/questions/13596428/adding-a-checkbox-group-to-a-java-menu/20092694#20092694 
provided by Julian Wright to create the equivalent of ButtonGroup 
available for JCheckBoxMenuItems


But I ran into a problem, the object returned by ItemEvent is of type 
String rather than CheckBoxMenuItem, I worked round it with the code 
below but this is an OSX bug isnt it ?

|import  java.awt.*;
import  java.awt.event.ItemEvent;
import  java.awt.event.ItemListener;
import  java.util.HashSet;
import  java.util.Set;

public  class  CheckboxMenuItemGroup  implements  ItemListener
{

     private  Set<CheckboxMenuItem>  items=  new  HashSet<CheckboxMenuItem>();

     public  void  add(CheckboxMenuItem  cbmi)  {
         cbmi.addItemListener(this);
         cbmi.setState(false);
         items.add(cbmi);
     }

     @Override
     public  void  itemStateChanged(ItemEvent  e)  {
         if  (e.getStateChange()  ==  ItemEvent.SELECTED)  {

             String  itemAffected=  (String)e.getItem();
             for  (CheckboxMenuItem  item:  items)  {
                 if  (item.getLabel()  !=  itemAffected)  item.setState(false);
             }
         }
     }

     public  void  selectItem(CheckboxMenuItem  itemToSelect)  {
         for  (CheckboxMenuItem  item:  items)  {
             item.setState(item==  itemToSelect);
         }
     }|



More information about the macosx-port-dev mailing list