AWT 無獨立 RadioButton 類別。單選按鈕由 Checkbox + CheckboxGroup 組合實現:
CheckboxGroup:邏輯容器,確保組內同一時間僅一個 Checkbox 為選中狀態new Checkbox(label, group, state):第三參數 true 設為預設選中true,最後一個生效//: RadioButton1.java
import java.awt.*;
import java.applet.*;
public class RadioButton1 extends Applet {
TextField t = new TextField("Radio button 2", 30);
CheckboxGroup g = new CheckboxGroup();
Checkbox cb1 = new Checkbox("one", g, false),
cb2 = new Checkbox("two", g, true), // 預設選中
cb3 = new Checkbox("three", g, false);
public void init() {
t.setEditable(false); // 僅顯示,不可編輯
add(t); add(cb1); add(cb2); add(cb3);
}
public boolean action(Event evt, Object arg) {
if (evt.target.equals(cb1)) t.setText("Radio button 1");
else if (evt.target.equals(cb2)) t.setText("Radio button 2");
else if (evt.target.equals(cb3)) t.setText("Radio button 3");
else return super.action(evt, arg);
return true;
}
} ///:~
setEditable(false) 讓 TextField 成為唯讀標籤,避免使用者誤以為可輸入action() (Java 1.0) / ItemListener (Java 1.1+)evt.target 識別哪個按鈕被點擊建立多個 CheckboxGroup 實例,每組獨立互斥,可在同一視窗共存。
| 技術 | 核心類別 | 關鍵差異 |
|---|---|---|
| Swing | JRadioButton + ButtonGroup | 獨立類別、支援圖示/文字對齊/邊距、ButtonGroup 邏輯分離、MVC 模型、無需預設選中 (可全不選) |
| JavaFX | RadioButton + ToggleGroup | 泛型 ToggleGroup、CSS 樣式、屬性綁定 (selectedProperty())、可全不選、動畫過渡 |
| Web | <input type="radio" name="group"> | 原生語義、同 name 互斥、無需 JS 邏輯、無障礙支援完整 |
true,否則拋異常。Swing/JavaFX 允許無預設選中。true。AWT 用 Checkbox + CheckboxGroup 模擬單選按鈕,機制簡單但強制預設選中、無獨立類別、外觀固定。Swing JRadioButton + ButtonGroup 與 JavaFX RadioButton + ToggleGroup 實現真正的單選按鈕抽象:邏輯分離、外觀可控、支援無預設選中、完整 MVC/屬性綁定。理解復用機制有助於閱讀舊代碼,新專案請直接使用現代 API。