| 建構子 | 說明 |
|---|---|
JRadioButton() | 建立無文字、無圖示的單選按鈕 |
JRadioButton(Icon icon) | 建立含圖示無文字的單選按鈕 |
JRadioButton(Icon icon, boolean selected) | 建立含圖示無文字,並指定初始選取狀態 |
JRadioButton(String text) | 建立含文字的單選按鈕 |
JRadioButton(String text, boolean selected) | 建立含文字並指定初始選取狀態 |
JRadioButton(String text, Icon icon) | 建立含文字與圖示,預設未選取 |
JRadioButton(String text, Icon icon, boolean selected) | 建立含文字、圖示並指定初始狀態 |
要將多個 JRadioButton 變為單選群組,必須使用 ButtonGroup(位於 javax.swing 套件)。其核心功能:同一時刻僅允許一個元件處於「on」狀態。適用於 AbstractButton 子類別:JRadioButton、JRadioButtonMenuItem、JToggleButton 等。
| 方法 | 功能 |
|---|---|
add(AbstractButton b) | 將按鈕加入群組 |
clearSelection() | 清除所有選取,群組中無按鈕被選中 |
getButtonCount() | 取得群組內按鈕總數 |
getElements() | 取得群組內所有按鈕的列舉 |
remove(AbstractButton b) | 從群組移除按鈕 |
| 建構子 | 說明 |
|---|---|
JCheckBox() | 建立無文字、無圖示的複選框 |
JCheckBox(Icon icon) | 建立含圖示無文字 |
JCheckBox(Icon icon, boolean selected) | 建立含圖示並指定初始狀態 |
JCheckBox(String text) | 建立含文字 |
JCheckBox(String text, boolean selected) | 建立含文字並指定初始狀態 |
JCheckBox(String text, Icon icon) | 建立含文字與圖示,預設未選取 |
JCheckBox(String text, Icon icon, boolean selected) | 建立含文字、圖示並指定初始狀態 |
當 JCheckBox 選項被選取或取消時,觸發 ItemEvent。常用方法:
getItemSelectable():取得觸發事件的元件(等同 getSource())getStateChange():回傳整數值,配合 ItemEvent.SELECTED(選取)或 ItemEvent.DESELECTED(取消)判斷狀態public void addItemListener(ItemListener l) // 註冊
public void removeItemListener(ItemListener l) // 移除
package ch10;
import java.awt.event.*;
import javax.swing.*;
public class Vote extends JFrame implements ActionListener {
private JPanel jp = new JPanel();
private JRadioButton[] jrb = {
new JRadioButton("這個網站很好,很新鮮!", true),
new JRadioButton("這個網站很普通,太平庸"),
new JRadioButton("這個網站很差,偶爾看一下"),
new JRadioButton("這個網站太差了,不來了")
};
private ButtonGroup bg = new ButtonGroup();
private JCheckBox[] jcb = {
new JCheckBox("介面較美觀"),
new JCheckBox("內容較豐富"),
new JCheckBox("增值服務較好"),
new JCheckBox("會員服務較好")
};
private JButton[] jb = {new JButton("我要投票"), new JButton("我要重選")};
private JLabel[] jl = {
new JLabel("這個網站給你的印象是:"),
new JLabel("您認為本站哪裡做得較好"),
new JLabel("您投票的內容是:")
};
private JTextArea jt = new JTextArea();
private JScrollPane js = new JScrollPane(jt);
public Vote() {
jp.setLayout(null);
for (int i = 0; i < 4; i++) {
jrb[i].setBounds(30 + 170 * i, 40, 170, 30);
jcb[i].setBounds(30 + 120 * i, 100, 120, 30);
jp.add(jrb[i]);
jp.add(jcb[i]);
jcb[i].addActionListener(this);
jrb[i].addActionListener(this);
bg.add(jrb[i]);
if (i > 1) continue;
jl[i].setBounds(20, 20 + 50 * i, 200, 30);
jb[i].setBounds(380 + 120 * i, 200, 100, 20);
jp.add(jl[i]);
jp.add(jb[i]);
jb[i].addActionListener(this);
}
jl[2].setBounds(20, 150, 120, 30);
jp.add(jl[2]);
js.setBounds(120, 150, 500, 50);
jp.add(js);
jt.setLineWrap(true);
jt.setEditable(false);
this.add(jp);
this.setTitle("網站滿意度問卷調查表");
this.setBounds(150, 150, 750, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jb[1]) { // 重選按鈕
bg.clearSelection();
for (JCheckBox cb : jcb) cb.setSelected(false);
jt.setText("");
} else { // 投票按鈕
StringBuilder sb1 = new StringBuilder("你認為這個網站");
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 4; i++) {
if (jrb[i].isSelected()) sb1.append(jrb[i].getText());
if (jcb[i].isSelected()) sb2.append(jcb[i].getText()).append("、");
}
if (sb2.length() == 0) {
jt.setText("請將兩項問卷都選擇");
} else {
sb1.append(",你認為這個網站");
sb1.append(sb2.substring(0, sb2.length() - 1));
jt.setText(sb1.toString());
}
}
}
public static void main(String[] args) {
new Vote();
}
}
視窗包含四個單選按鈕(互斥)、四個複選框(可多選)、投票與重選按鈕,下方文字區顯示綜合結果。