/* Copyright (C) 2000 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.awt; import java.awt.event.*; import java.awt.peer.CheckboxPeer; /** This class implements a component which has an on/off state. Two * or more Checkboxes can be grouped by a CheckboxGroup. * @author Tom Tromey * @date December 25, 2000 */ public class Checkbox extends Component implements ItemSelectable { /** Create a new checkbox. * @param label The checkbox label. A null value is the same as ""; * this is the default. * @param state The initial check state; defaults to false. * @param group The CheckboxGroup. Defaults to null. */ public Checkbox () { this (null, null, false); } public Checkbox (String label) { this (label, null, false); } public Checkbox (String label, boolean state) { this (label, null, state); } public Checkbox (String label, boolean state, CheckboxGroup group) { this (label, group, state); } public Checkbox (String label, CheckboxGroup group, boolean state) { this.label = label; this.group = group; this.state = state; } /** Add a listener for item events. * @param listener The listener to add. */ public synchronized void addItemListener (ItemListener listener) { listeners = AWTEventMulticaster.add (listeners, listener); } /** This creates the component's peer. */ public void addNotify () { if (peer == null) peer = getToolkit ().createCheckbox (this); } /** Returns the current CheckboxGroup associated with this * Checkbox. */ public CheckboxGroup getCheckboxGroup () { return group; } /** Returns the current label; might be null. */ public String getLabel () { return label; } /** Returns this checkbox's label if this checkbox is selected. */ public Object[] getSelectedObjects () { Object[] r; if (state) { r = new Object[1]; r[0] = label; } else r = new Object[0]; return r; } /** Returns the current state of this checkbox. */ public boolean getState () { return state; } /** Generates a String representation of this Checkbox's state. */ protected String paramString () { return ("Checkbox[" + "state=" + state + "," + "label=" + label + "," + "group=" + group + "]"); } /** Process an event for this Checkbox. * @param event The event the process. */ protected void processEvent (AWTEvent event) { if (event instanceof ItemEvent) processItemEvent ((ItemEvent) event); else super.processEvent (event); } /** Process an item event for this Checkbox. * @param event The ItemEvent to process */ protected void processItemEvent (ItemEvent event) { if (listeners != null) listeners.itemStateChanged (event); } /** Remove an item listener. * @param listener Item listener to remove. */ public synchronized void removeItemListener (ItemListener listener) { listeners = AWTEventMulticaster.remove (listeners, listener); } /** Set this checkbox's group. * @param group The new group. null means remove the Checkbox from * its group. */ public void setCheckboxGroup (CheckboxGroup group) { this.group = group; if (peer != null) { CheckboxPeer cp = (CheckboxPeer) peer; cp.setCheckboxGroup (group); } } /** Set the checkbox's label. * @param label The new label */ public synchronized void setLabel (String label) { this.label = label; if (peer != null) { CheckboxPeer cp = (CheckboxPeer) peer; // FIXME: unclear what to do here; we err on the side of // caution. cp.setLabel (label == null ? "" : label); } } /** Set the checkbox's state. * @param state The new state. */ public void setState (boolean state) { this.state = state; if (peer != null) { CheckboxPeer cp = (CheckboxPeer) peer; cp.setState (state); } } private ItemListener listeners; String label; CheckboxGroup group; boolean state; }