Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 2
0
 /**
  * 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);
   }
 }
Esempio n. 3
0
  /**
   * 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);
    }
  }