本文目录导读:

我来为您详细介绍如何构建和添加JMenuBar菜单栏,包括完整示例:
基本结构
import javax.swing.*;
public class MenuExample {
public static void main(String[] args) {
JFrame frame = new JFrame("菜单栏示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
// 1. 创建菜单栏
JMenuBar menuBar = new JMenuBar();
// 2. 创建菜单
JMenu fileMenu = new JMenu("文件(F)");
JMenu editMenu = new JMenu("编辑(E)");
JMenu helpMenu = new JMenu("帮助(H)");
// 3. 创建菜单项
// 文件菜单项
JMenuItem newItem = new JMenuItem("新建");
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
// 编辑菜单项
JMenuItem cutItem = new JMenuItem("剪切");
JMenuItem copyItem = new JMenuItem("复制");
JMenuItem pasteItem = new JMenuItem("粘贴");
// 帮助菜单项
JMenuItem aboutItem = new JMenuItem("quot;);
// 4. 添加菜单项到菜单
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator(); // 添加分隔线
fileMenu.add(exitItem);
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
helpMenu.add(aboutItem);
// 5. 添加菜单到菜单栏
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
// 6. 设置菜单栏到窗口
frame.setJMenuBar(menuBar);
frame.setVisible(true);
}
}
添加事件监听
// 文件菜单事件
exitItem.addActionListener(e -> System.exit(0));
newItem.addActionListener(e ->
JOptionPane.showMessageDialog(frame, "新建文件"));
openItem.addActionListener(e -> {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
System.out.println("选择文件: " + fileChooser.getSelectedFile());
}
});
高级功能示例
public class AdvancedMenuExample extends JFrame {
private JTextArea textArea;
public AdvancedMenuExample() {
setTitle("高级菜单示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 400);
// 创建文本区域用于测试
textArea = new JTextArea();
add(new JScrollPane(textArea), BorderLayout.CENTER);
// 构建完整菜单
createMenuBar();
setVisible(true);
}
private void createMenuBar() {
JMenuBar menuBar = new JMenuBar();
// 文件菜单
JMenu fileMenu = createFileMenu();
// 编辑菜单
JMenu editMenu = createEditMenu();
// 视图菜单
JMenu viewMenu = createViewMenu();
// 帮助菜单
JMenu helpMenu = createHelpMenu();
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(viewMenu);
menuBar.add(Box.createHorizontalGlue()); // 右对齐
menuBar.add(helpMenu);
setJMenuBar(menuBar);
}
private JMenu createFileMenu() {
JMenu fileMenu = new JMenu("文件");
// 使用图标
JMenuItem newItem = new JMenuItem("新建", new ImageIcon("new.png"));
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem saveAsItem = new JMenuItem("另存为...");
// 添加快捷键
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_DOWN_MASK));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_DOWN_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_DOWN_MASK));
// 事件处理
newItem.addActionListener(e -> textArea.setText(""));
openItem.addActionListener(e -> openFile());
saveItem.addActionListener(e -> saveFile());
// 子菜单
JMenu recentMenu = new JMenu("最近打开");
recentMenu.add(new JMenuItem("文件1.txt"));
recentMenu.add(new JMenuItem("文件2.txt"));
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.addSeparator();
fileMenu.add(saveItem);
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
fileMenu.add(recentMenu);
fileMenu.addSeparator();
// 复选框菜单项
JCheckBoxMenuItem autoSaveItem = new JCheckBoxMenuItem("自动保存");
autoSaveItem.addActionListener(e -> {
if (autoSaveItem.isSelected()) {
System.out.println("自动保存已开启");
}
});
fileMenu.add(autoSaveItem);
fileMenu.addSeparator();
JMenuItem exitItem = new JMenuItem("退出");
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
InputEvent.CTRL_DOWN_MASK));
exitItem.addActionListener(e -> System.exit(0));
fileMenu.add(exitItem);
return fileMenu;
}
private JMenu createEditMenu() {
JMenu editMenu = new JMenu("编辑");
JMenuItem undoItem = new JMenuItem("撤销");
JMenuItem redoItem = new JMenuItem("重做");
JMenuItem cutItem = new JMenuItem("剪切");
JMenuItem copyItem = new JMenuItem("复制");
JMenuItem pasteItem = new JMenuItem("粘贴");
JMenuItem selectAllItem = new JMenuItem("全选");
// 添加快捷键
undoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
InputEvent.CTRL_DOWN_MASK));
redoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,
InputEvent.CTRL_DOWN_MASK));
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_DOWN_MASK));
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_DOWN_MASK));
pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
InputEvent.CTRL_DOWN_MASK));
// 事件处理
cutItem.addActionListener(e -> textArea.cut());
copyItem.addActionListener(e -> textArea.copy());
pasteItem.addActionListener(e -> textArea.paste());
selectAllItem.addActionListener(e -> textArea.selectAll());
editMenu.add(undoItem);
editMenu.add(redoItem);
editMenu.addSeparator();
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
editMenu.addSeparator();
editMenu.add(selectAllItem);
return editMenu;
}
private JMenu createViewMenu() {
JMenu viewMenu = new JMenu("视图");
// 单选按钮菜单项组
ButtonGroup fontSizeGroup = new ButtonGroup();
JRadioButtonMenuItem smallFont = new JRadioButtonMenuItem("小字体");
JRadioButtonMenuItem mediumFont = new JRadioButtonMenuItem("中字体", true);
JRadioButtonMenuItem largeFont = new JRadioButtonMenuItem("大字体");
fontSizeGroup.add(smallFont);
fontSizeGroup.add(mediumFont);
fontSizeGroup.add(largeFont);
smallFont.addActionListener(e -> textArea.setFont(new Font("宋体", Font.PLAIN, 12)));
mediumFont.addActionListener(e -> textArea.setFont(new Font("宋体", Font.PLAIN, 16)));
largeFont.addActionListener(e -> textArea.setFont(new Font("宋体", Font.PLAIN, 20)));
viewMenu.add(smallFont);
viewMenu.add(mediumFont);
viewMenu.add(largeFont);
viewMenu.addSeparator();
JCheckBoxMenuItem lineWrap = new JCheckBoxMenuItem("自动换行", true);
lineWrap.addActionListener(e -> textArea.setLineWrap(lineWrap.isSelected()));
viewMenu.add(lineWrap);
return viewMenu;
}
private JMenu createHelpMenu() {
JMenu helpMenu = new JMenu("帮助");
JMenuItem aboutItem = new JMenuItem("quot;);
aboutItem.addActionListener(e ->
JOptionPane.showMessageDialog(this,
"菜单示例程序\n版本 1.0",
"quot;,
JOptionPane.INFORMATION_MESSAGE));
helpMenu.add(aboutItem);
return helpMenu;
}
private void openFile() {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
File file = fileChooser.getSelectedFile();
BufferedReader reader = new BufferedReader(new FileReader(file));
textArea.read(reader, null);
reader.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "打开文件失败:" + ex.getMessage());
}
}
}
private void saveFile() {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
File file = fileChooser.getSelectedFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
textArea.write(writer);
writer.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "保存文件失败:" + ex.getMessage());
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new AdvancedMenuExample());
}
}
关键要点
- 层次结构:JMenuBar → JMenu → JMenuItem
- 快捷键:使用
setAccelerator()设置 - 分隔线:使用
addSeparator()添加 - 特殊菜单项:
JCheckBoxMenuItem:复选框JRadioButtonMenuItem:单选按钮- 子菜单:JMenu作为子菜单
这样可以构建功能完整、专业美观的菜单栏。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播