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

Java Swing 實現圖標切換的複選框 (JCheckBox) 完整範例

     編輯:Java 相關知識

前言

Swing 的 JCheckBox 不僅支援文字標籤,透過 Icon、RolloverIcon、SelectedIcon 三種圖標狀態,能輕鬆實現滑鼠懸停、選中時的視覺反饋。本文提供一個可直接運行的 Applet 範例,展示如何為每個複選框配置三態圖標並監聽選項變更事件。

完整代碼

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class CheckBoxIconDemo extends JApplet implements ItemListener {
    private JTextField statusField;

    @Override
    public void init() {
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());

        // 預載三張圖標(請替換為實際路徑)
        ImageIcon normal = new ImageIcon("images/6.gif");
        ImageIcon rollover = new ImageIcon("images/7.gif");
        ImageIcon selected = new ImageIcon("images/8.gif");

        String[] labels = { "C", "C++", "Java" };
        for (String label : labels) {
            JCheckBox cb = new JCheckBox(label, normal);
            cb.setRolloverIcon(rollover);   // 滑鼠懸停
            cb.setSelectedIcon(selected);   // 選中狀態
            cb.addItemListener(this);
            cp.add(cb);
        }

        statusField = new JTextField(15);
        statusField.setEditable(false);
        cp.add(statusField);
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        JCheckBox src = (JCheckBox) e.getItem();
        statusField.setText(src.getText() + (src.isSelected() ? " 已選中" : " 已取消"));
    }
}

關鍵點解析

  1. 三態圖標:setIcon(構造函數傳入)對應正常態;setRolloverIcon 對應滑鼠進入;setSelectedIcon 對應選中態。若未設定,Swing 會自動生成灰化/按下效果。
  2. 事件監聽:實現 ItemListener,itemStateChanged 中通过 e.getStateChange() == ItemEvent.SELECTED 或 JCheckBox.isSelected() 判斷狀態。
  3. 佈局:FlowLayout 自動左到右排列,適合表單類 UI。
  4. Applet 啟動:Eclipse 中 Run As → Java Applet;JDK 環境需編寫 HTML 引用 <applet code="CheckBoxIconDemo.class" width="400" height="200"></applet> 並用 appletviewer 運行。

進階提示

  • 生產環境建議將圖標放入 classpath(getClass().getResource("/icons/..."))而非絕對路徑。
  • 大量圖標時使用 ImageIcon 緩存或 Icon 單例模式,避免重複載入。
  • 若需更豐富交互(右鍵菜單、鍵盤快捷鍵),可組合 ActionMap/InputMap。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved