package bibliothek.notes.view.menu; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JCheckBoxMenuItem; /** * A {@link JCheckBoxMenuItem} who has an {@link ActionListener} to itself, * but whose state can be changed without notifying the listener. * @author Benjamin Sigg * @see #setSilent(boolean) */ public abstract class UpdateableCheckBoxMenuItem extends JCheckBoxMenuItem implements ActionListener{ /** a flag indicating that the state is silently changed */ private boolean onUpdate = false; /** * Creates a new item. */ public UpdateableCheckBoxMenuItem(){ addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ if( !onUpdate ){ UpdateableCheckBoxMenuItem.this.actionPerformed( e ); } } }); } /** * Silently changes the state (selected or not) of this item. The * {@link ActionListener#actionPerformed(ActionEvent) actionPerformed}-method * of this item is not invoked when using this method. * @param state the new state */ public void setSilent( boolean state ){ onUpdate = true; setSelected( state ); onUpdate = false; } }