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 和各类需要用户设置的应用中。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播