首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 核心元件詳解:JRadioButton 單選按鈕與 JCheckBox 複選框完整指南

     編輯:Java 相關知識

JRadioButton 單選按鈕

建構子總覽

建構子說明
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)建立含文字、圖示並指定初始狀態

ButtonGroup:實現單選互斥邏輯

要將多個 JRadioButton 變為單選群組,必須使用 ButtonGroup(位於 javax.swing 套件)。其核心功能:同一時刻僅允許一個元件處於「on」狀態。適用於 AbstractButton 子類別:JRadioButton、JRadioButtonMenuItem、JToggleButton 等。

ButtonGroup 常用方法

方法功能
add(AbstractButton b)將按鈕加入群組
clearSelection()清除所有選取,群組中無按鈕被選中
getButtonCount()取得群組內按鈕總數
getElements()取得群組內所有按鈕的列舉
remove(AbstractButton b)從群組移除按鈕

JCheckBox 複選框

建構子總覽

建構子說明
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)建立含文字、圖示並指定初始狀態

事件處理:ItemEvent 與 ItemListener

當 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();
    }
}

執行結果示意

視窗包含四個單選按鈕(互斥)、四個複選框(可多選)、投票與重選按鈕,下方文字區顯示綜合結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved