RadioButton.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. import com.sun.lwuit.geom.Dimension;
  27. import com.sun.lwuit.plaf.DefaultLookAndFeel;
  28. import com.sun.lwuit.plaf.LookAndFeel;
  29. import com.sun.lwuit.plaf.UIManager;
  30. /**
  31.  * RadioButton is a {@link Button} that maintains a selection state exclusively
  32.  * within a specific {@link ButtonGroup}
  33.  * 
  34.  * @author Chen Fishbein
  35.  */
  36. public class RadioButton extends Button {
  37.     
  38.     private boolean selected= false;
  39.     
  40.     /**
  41.      * The group in which this button is a part
  42.      */
  43.     private ButtonGroup group;
  44.     
  45.     /**
  46.      * Constructs a radio with the given text
  47.      * 
  48.      * @param text to display next to the button
  49.      */
  50.     public RadioButton(String text) {
  51.         this(text, null);
  52.     }
  53.     
  54.     /**
  55.      * Creates an empty radio button
  56.      */
  57.     public RadioButton() {
  58.         this("");
  59.     }
  60.     
  61.     /**
  62.      * Constructs a radio with the given icon
  63.      * 
  64.      * @param icon icon to show next to the button
  65.      */
  66.     public RadioButton(Image icon) {
  67.         this("", icon);
  68.     }
  69.     /**
  70.      * Constructs a radio with the given text and icon
  71.      * 
  72.      * @param text to display next to the button
  73.      * @param icon icon to show next to the button
  74.      */
  75.     public RadioButton(String text,Image icon) {
  76.         super(text,icon);
  77.         setUIID("RadioButton");
  78.     }
  79.     
  80.     /**
  81.      * @inheritDoc
  82.      */
  83.     public String toString() {
  84.         return "Radio Button " + getText();
  85.     }
  86.     int getAvaliableSpaceForText() {
  87.         LookAndFeel l = UIManager.getInstance().getLookAndFeel();
  88.         if(l instanceof DefaultLookAndFeel) {
  89.             Image[] rButtonImages = ((DefaultLookAndFeel)l).getRadioButtonImages();
  90.             if (rButtonImages != null) {
  91.                 int index = isSelected() ? 1 : 0;
  92.                 return super.getAvaliableSpaceForText() - rButtonImages[index].getWidth();
  93.             }
  94.         }
  95.         return super.getAvaliableSpaceForText() - (getHeight() + getGap());
  96.     }
  97.     
  98.     /**
  99.      * Returns true if the radio button is selected
  100.      * 
  101.      * @return true if the radio button is selected
  102.      */
  103.     public boolean isSelected() {
  104.         return selected;
  105.     }
  106.     void setSelectedImpl(boolean selected) {
  107.         this.selected = selected;
  108.         repaint();
  109.     }
  110.     
  111.     /**
  112.      * Selects the current radio button
  113.      * 
  114.      * @param selected value for selection
  115.      */
  116.     public void setSelected(boolean selected) {
  117.         setSelectedImpl(selected);
  118.         if(group != null && selected) {
  119.             group.setSelected(this);
  120.         }
  121.     }
  122.     
  123.     /**
  124.      * @inheritDoc
  125.      */
  126.     void released() {
  127.         // prevent the radio button from being "turned off"
  128.         if(!isSelected()) {
  129.             setSelected(true);
  130.         }
  131.         super.released();
  132.     }
  133.     
  134.     /**
  135.      * @inheritDoc
  136.      */
  137.     public void paint(Graphics g) {
  138.         UIManager.getInstance().getLookAndFeel().drawRadioButton(g, this);
  139.     }
  140.     
  141.     /**
  142.      * @inheritDoc
  143.      */
  144.     protected Dimension calcPreferredSize(){
  145.         return UIManager.getInstance().getLookAndFeel().getRadioButtonPreferredSize(this);
  146.     }
  147.     
  148.     /**
  149.      * Setting a new button group
  150.      * 
  151.      * @param group a new button group
  152.      */
  153.     void setGroup(ButtonGroup group) {
  154.         this.group = group;
  155.     }
  156.     /**
  157.      * @inheritDoc
  158.      */
  159.     void fireActionEvent() {
  160.         if(group != null) {
  161.             group.setSelected(this);
  162.         }
  163.         super.fireActionEvent();
  164.     }
  165. }