/** * Constructs a Checkbox with the specified label, set to the specified state, and in the * specified check box group. * * @param label a string label for this check box, or <code>null</code> for no label. * @param state the initial state of this check box. * @param group a check box group for this check box, or <code>null</code> for no group. * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless</code> returns <code>true * </code> * @see j86.java.awt.GraphicsEnvironment#isHeadless * @since JDK1.1 */ public Checkbox(String label, boolean state, CheckboxGroup group) throws HeadlessException { GraphicsEnvironment.checkHeadless(); this.label = label; this.state = state; this.group = group; if (state && (group != null)) { group.setSelectedCheckbox(this); } }
/** * Sets the state of this check box to the specified state. The boolean value <code>true</code> * indicates the "on" state, and <code>false</code> indicates the "off" state. * * <p>Note that this method should be primarily used to initialize the state of the checkbox. * Programmatically setting the state of the checkbox will <i>not</i> trigger an <code>ItemEvent * </code>. The only way to trigger an <code>ItemEvent</code> is by user interaction. * * @param state the boolean state of the check box * @see #getState */ public void setState(boolean state) { /* Cannot hold check box lock when calling group.setSelectedCheckbox. */ CheckboxGroup group = this.group; if (group != null) { if (state) { group.setSelectedCheckbox(this); } else if (group.getSelectedCheckbox() == this) { state = true; } } setStateInternal(state); }
/** * Sets this check box's group to the specified check box group. If this check box is already in a * different check box group, it is first taken out of that group. * * <p>If the state of this check box is <code>true</code> and the new group already has a check * box selected, this check box's state is changed to <code>false</code>. If the state of this * check box is <code>true</code> and the new group has no check box selected, this check box * becomes the selected checkbox for the new group and its state is <code>true</code>. * * @param g the new check box group, or <code>null</code> to remove this check box from any check * box group * @see #getCheckboxGroup */ public void setCheckboxGroup(CheckboxGroup g) { CheckboxGroup oldGroup; boolean oldState; /* Do nothing if this check box has already belonged * to the check box group g. */ if (this.group == g) { return; } synchronized (this) { oldGroup = this.group; oldState = getState(); this.group = g; CheckboxPeer peer = (CheckboxPeer) this.peer; if (peer != null) { peer.setCheckboxGroup(g); } if (this.group != null && getState()) { if (this.group.getSelectedCheckbox() != null) { setState(false); } else { this.group.setSelectedCheckbox(this); } } } /* Locking check box below could cause deadlock with * CheckboxGroup's setSelectedCheckbox method. * * Fix for 4726853 by [email protected] * Here we should check if this check box was selected * in the previous group and set selected check box to * null for that group if so. */ if (oldGroup != null && oldState) { oldGroup.setSelectedCheckbox(null); } }