JCheckBoxMenuItem复选框菜单项

wen java案例 1

JCheckBoxMenuItem - Java Swing复选框菜单项

JCheckBoxMenuItem 是Java Swing中用于创建带有复选框功能的菜单项,它继承自 JMenuItem,允许用户在菜单中选择/取消选择某个选项。

JCheckBoxMenuItem复选框菜单项

基本用法示例

import javax.swing.*;
import java.awt.event.*;
public class CheckBoxMenuItemExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JCheckBoxMenuItem示例");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        // 创建菜单栏
        JMenuBar menuBar = new JMenuBar();
        // 创建菜单
        JMenu optionsMenu = new JMenu("选项");
        // 创建复选框菜单项
        JCheckBoxMenuItem showToolbar = new JCheckBoxMenuItem("显示工具栏", true);
        JCheckBoxMenuItem showStatusBar = new JCheckBoxMenuItem("显示状态栏");
        JCheckBoxMenuItem autoSave = new JCheckBoxMenuItem("自动保存", false);
        // 添加事件监听
        showToolbar.addItemListener(e -> {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                System.out.println("显示工具栏: 选中");
            } else {
                System.out.println("显示工具栏: 取消选中");
            }
        });
        // 添加到菜单
        optionsMenu.add(showToolbar);
        optionsMenu.add(showStatusBar);
        optionsMenu.addSeparator();
        optionsMenu.add(autoSave);
        // 添加到菜单栏
        menuBar.add(optionsMenu);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }
}

关键构造方法

构造方法 说明
JCheckBoxMenuItem() 创建无文本、未选中的复选框菜单项
JCheckBoxMenuItem(String text) 创建指定文本、未选中的复选框菜单项
JCheckBoxMenuItem(String text, boolean selected) 创建指定文本和选中状态的复选框菜单项
JCheckBoxMenuItem(String text, Icon icon) 创建指定文本和图标的复选框菜单项
JCheckBoxMenuItem(String text, Icon icon, boolean selected) 创建指定文本、图标和选中状态的复选框菜单项

常用方法

// 设置/获取选中状态
checkBoxMenuItem.setSelected(true);  // 选中
boolean isSelected = checkBoxMenuItem.isSelected();
// 添加事件监听器
checkBoxMenuItem.addItemListener(e -> {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        // 选中时的操作
    } else {
        // 取消选中时的操作
    }
});
// 或者使用ActionListener
checkBoxMenuItem.addActionListener(e -> {
    // 点击时的操作
});

完整示例 - 文本编辑器设置

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TextEditorSettings {
    private JTextArea textArea;
    private JLabel statusLabel;
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new TextEditorSettings().createGUI());
    }
    private void createGUI() {
        JFrame frame = new JFrame("文本编辑器");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        // 文本区域
        textArea = new JTextArea();
        frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
        // 状态标签
        statusLabel = new JLabel("状态: 就绪");
        frame.add(statusLabel, BorderLayout.SOUTH);
        // 创建菜单
        JMenuBar menuBar = new JMenuBar();
        // 视图菜单
        JMenu viewMenu = new JMenu("视图");
        JCheckBoxMenuItem wordWrap = new JCheckBoxMenuItem("自动换行", true);
        JCheckBoxMenuItem lineNumbers = new JCheckBoxMenuItem("显示行号", false);
        JCheckBoxMenuItem toolbar = new JCheckBoxMenuItem("显示工具栏", true);
        JCheckBoxMenuItem statusBar = new JCheckBoxMenuItem("显示状态栏", true);
        wordWrap.addActionListener(e -> {
            textArea.setLineWrap(wordWrap.isSelected());
            textArea.setWrapStyleWord(wordWrap.isSelected());
            updateStatus("自动换行: " + (wordWrap.isSelected() ? "开启" : "关闭"));
        });
        lineNumbers.addActionListener(e -> {
            // 实际项目中这里会实现行号显示逻辑
            updateStatus("行号显示: " + (lineNumbers.isSelected() ? "开启" : "关闭"));
        });
        toolbar.addActionListener(e -> {
            // 实际项目中这里会控制工具栏显示
            updateStatus("工具栏: " + (toolbar.isSelected() ? "显示" : "隐藏"));
        });
        statusBar.addActionListener(e -> {
            statusLabel.setVisible(statusBar.isSelected());
            updateStatus("状态栏: " + (statusBar.isSelected() ? "显示" : "隐藏"));
        });
        viewMenu.add(wordWrap);
        viewMenu.add(lineNumbers);
        viewMenu.addSeparator();
        viewMenu.add(toolbar);
        viewMenu.add(statusBar);
        // 编辑菜单
        JMenu editMenu = new JMenu("编辑");
        JCheckBoxMenuItem autoSave = new JCheckBoxMenuItem("自动保存", false);
        JCheckBoxMenuItem spellCheck = new JCheckBoxMenuItem("拼写检查", true);
        autoSave.addActionListener(e -> {
            updateStatus("自动保存: " + (autoSave.isSelected() ? "开启" : "关闭"));
        });
        spellCheck.addActionListener(e -> {
            updateStatus("拼写检查: " + (spellCheck.isSelected() ? "开启" : "关闭"));
        });
        editMenu.add(autoSave);
        editMenu.add(spellCheck);
        menuBar.add(viewMenu);
        menuBar.add(editMenu);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }
    private void updateStatus(String message) {
        statusLabel.setText("状态: " + message);
    }
}

使用技巧

  1. 状态管理:使用 isSelected() 方法获取当前状态
  2. 事件处理ItemListenerActionListener 都可以使用
  3. 默认状态:可以在构造函数中设置初始选中状态
  4. 分组:使用 ButtonGroup 可以实现单选效果(需配合其他组件)
  5. 快捷键:可以使用 setAccelerator() 设置快捷键

JCheckBoxMenuItem 是构建带有配置选项菜单的理想组件,常见于文本编辑器、IDE 和各类需要用户设置的应用中。

抱歉,评论功能暂时关闭!