ButtonGroup.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:5k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit;
  26. /**
  27.  * This class is used to create a multiple-exclusion scope for a set of 
  28.  * RadioButtons. Creating a set of RadioButtons with the same ButtonGroup object
  29.  * means that only one RadioButton can be selected amoung the ButtonGroup.
  30.  * Initialy all RadioButtons are unselected.
  31.  * 
  32.  * @author Nir Shabi
  33.  */
  34. public class ButtonGroup {
  35.     
  36.     
  37.     private java.util.Vector buttons = new java.util.Vector();
  38.     private int selectedIndex=-1;
  39.     
  40.     /** 
  41.      * Creates a new instance of ButtonsGroup 
  42.      */
  43.     public ButtonGroup() {
  44.     }
  45.     
  46.     /**
  47.      * Adds a RadioButton to the group
  48.      * 
  49.      * @param rb a RadioButton to add
  50.      */
  51.     public void add(RadioButton rb){
  52.         if(rb==null)
  53.             return;
  54.         if(!buttons.contains(rb)) {
  55.             buttons.addElement(rb);
  56.             if(rb.isSelected())
  57.                 setSelected(buttons.indexOf(rb));
  58.             rb.setGroup(this);
  59.         }
  60.     }
  61.     /**
  62.      * removes a RadioButton from the group
  63.      * 
  64.      * @param rb a RadioButton to remove
  65.      */
  66.     public void remove(RadioButton rb){
  67.         if(rb==null)
  68.             return;
  69.         buttons.removeElement(rb);
  70.         if(rb.isSelected())
  71.             clearSelection();
  72.         rb.setGroup(null);
  73.     }
  74.     
  75.     /**
  76.      * Clears the selection such that none of the buttons in the ButtonGroup are selected.
  77.      */
  78.     public void clearSelection() {
  79.         if(selectedIndex!=-1) {
  80.             if(selectedIndex < buttons.size()) {
  81.                 ((RadioButton)buttons.elementAt(selectedIndex)).setSelected(false);
  82.             }
  83.             selectedIndex=-1;
  84.         }
  85.         
  86.     }
  87.     
  88.     /**
  89.      * Returns the number of buttons in the group.
  90.      * 
  91.      * @return number of radio buttons in the group
  92.      */
  93.     public int getButtonCount() {
  94.         return buttons.size();
  95.     }
  96.     
  97.     /**
  98.      * Returns whether a radio button in the group is selected.
  99.      * 
  100.      * @return true if a selection was made in the radio button group
  101.      */
  102.     public boolean isSelected() {
  103.         if(selectedIndex!= -1)
  104.             return true;
  105.         return false;
  106.     }
  107.     
  108.     /**
  109.      * Return the index of the selected button within the group
  110.      * 
  111.      * @return the index of the selected button within the group
  112.      */
  113.     public int getSelectedIndex() {
  114.         return selectedIndex;
  115.     }
  116.     
  117.     /**
  118.      * Returns the radio button at the given group index
  119.      * 
  120.      * @param index offset within the group starting with 0 and no larger than getButtonCount()
  121.      * @return the radio button instance
  122.      */
  123.     public RadioButton getRadioButton(int index) {
  124.         if(index >=0 && index < getButtonCount())
  125.             return ((RadioButton)buttons.elementAt(index));
  126.         return null;
  127.     }
  128.     /**
  129.      * Selects the given radio button
  130.      * 
  131.      * @param rb the radio button to set as selected
  132.      */
  133.     public void setSelected(RadioButton rb) {
  134.         if (rb != null) {
  135.             int index = buttons.indexOf(rb);
  136.             if(index < 0) {
  137.                 add(rb);
  138.                 index = buttons.indexOf(rb);
  139.             }
  140.             setSelected(index);
  141.         } else {
  142.             clearSelection();
  143.         }
  144.     }
  145.     
  146.     /**
  147.      * Sets the selected Radio button by index
  148.      * 
  149.      * @param index the index of the radio button to mark as selected
  150.      */
  151.     public void setSelected(int index) {
  152.         if(index < 0  ||  index >= getButtonCount() )
  153.             throw new IllegalArgumentException("Index out of bounds");
  154.         
  155.         if(selectedIndex!=-1) {
  156.             //unselect last selected Radio button
  157.             ((RadioButton)buttons.elementAt(selectedIndex)).setSelectedImpl(false);
  158.         }
  159.         ((RadioButton)buttons.elementAt(index)).setSelectedImpl(true);
  160.         selectedIndex=index;
  161.     }
  162. }