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

基本用法示例
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);
}
}
使用技巧
- 状态管理:使用
isSelected()方法获取当前状态 - 事件处理:
ItemListener和ActionListener都可以使用 - 默认状态:可以在构造函数中设置初始选中状态
- 分组:使用
ButtonGroup可以实现单选效果(需配合其他组件) - 快捷键:可以使用
setAccelerator()设置快捷键
JCheckBoxMenuItem 是构建带有配置选项菜单的理想组件,常见于文本编辑器、IDE 和各类需要用户设置的应用中。