13.9 单选钮

单选钮在GUI程序设计中的概念来自于老式的电子管汽车收音机的机械按钮:当我们按下一个按钮时,其它的按钮就会弹起。因此它允许我们强制从众多选择中作出单一选择。

AWT没有单独的描述单选钮的类;取而代之的是复用复选框。然而将复选框放在单选钮组中(并且修改它的外形使它看起来不同于一般的复选框)我们必须使用一个特殊的构造器象一个参数一样的作用在checkboxGroup对象上。(我们同样能在创建复选框后调用setCheckboxGroup()方法。)

一个复选框组没有构造器的参数;它存在的唯一理由就是聚集一些复选框到单选钮组里。一个复选框对象必须在我们试图显示单选钮组之前将它的状态设置成true,否则在运行时我们就会得到一个异常。如果我们设置超过一个的单选钮为true,只有最后的一个能被设置成真。

这里有个简单的使用单选钮的例子。注意我们可以像其它的组件一样捕捉单选钮的事件:

  1. //: RadioButton1.java
  2. // Using radio buttons
  3. import java.awt.*;
  4. import java.applet.*;
  5. public class RadioButton1 extends Applet {
  6. TextField t =
  7. new TextField("Radio button 2", 30);
  8. CheckboxGroup g = new CheckboxGroup();
  9. Checkbox
  10. cb1 = new Checkbox("one", g, false),
  11. cb2 = new Checkbox("two", g, true),
  12. cb3 = new Checkbox("three", g, false);
  13. public void init() {
  14. t.setEditable(false);
  15. add(t);
  16. add(cb1); add(cb2); add(cb3);
  17. }
  18. public boolean action (Event evt, Object arg) {
  19. if(evt.target.equals(cb1))
  20. t.setText("Radio button 1");
  21. else if(evt.target.equals(cb2))
  22. t.setText("Radio button 2");
  23. else if(evt.target.equals(cb3))
  24. t.setText("Radio button 3");
  25. else
  26. return super.action(evt, arg);
  27. return true;
  28. }
  29. } ///:~

显示的状态是一个文字字段在被使用。这个字段被设置为不可编辑的,因为它只是用来显示数据而不是收集。这演示了一个使用标签的可取之道。注意字段内的文字是由最早选择的单选钮Radio button 2初始化的。

我们可以在窗体中拥有相当多的复选框组。