——1、菜单组件
相关对象:
MenuBar 菜单条
Menu 菜单容器
PopupMenu 上下文菜单(右键弹出菜单组件)
MenuItem 菜单项
CheckboxMenuItem 复选框菜单项
小技巧:
1、添加这样的菜单项分割线可以直接调用add(new MenuItem("-"))实现

2、给某一个菜单项绑定快捷键,调用 new MenuItem("菜单项名称",new MenuShortcut(KeyEvent.枚举按键值,true))
案例:
package cn.dzz;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main {
public static void main(String[] args) {
// 创建窗体
Frame frame = new Frame();
// 先把界面需要的组件创建出来
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("file");
Menu editMenu = new Menu("edit");
// 格式菜单嵌入在编辑菜单对象中
Menu formatMenu = new Menu("Format");
// 菜单项
MenuItem autoNextLineMenuItem = new MenuItem("autoNextLine");
MenuItem copyMenuItem = new MenuItem("copy");
MenuItem pasteMenuItem = new MenuItem("paste");
MenuItem commentMenuItem = new MenuItem("comment Ctrl + Shift + Q");
MenuItem cancelCommentMenuItem = new MenuItem("comment cancel");
// 别漏了文本编辑区
TextArea textArea = new TextArea(6,40);
// 事件交互处理
commentMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("您点击了菜单项:" + e.getActionCommand());
}
});
// 先从小的组件开始组装到一起
// 格式菜单装上注释和取消注释
formatMenu.add(commentMenuItem);
formatMenu.add(cancelCommentMenuItem);
// 再组装编辑菜单
editMenu.add(autoNextLineMenuItem);
editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
editMenu.add(new MenuItem("-")); // 菜单分割线
editMenu.add(formatMenu);
// 再是菜单条添加菜单对象
menuBar.add(fileMenu);
menuBar.add(editMenu);
// 总体布局确定
frame.setMenuBar(menuBar);
frame.add(textArea);
frame.pack();
frame.setVisible(true);
}
}
效果还不错:

设置的菜单:

多点击几次之后发现没有换行,需要加上 换行字符
textArea.append("您点击了菜单项:" + e.getActionCommand() + "
");
弹出式菜单对象 PopupMenu
案例:
package cn.dzz; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main { public static void main(String[] args) { // 创建窗体 Frame frame = new Frame(); // 先创建组件,之后进行布局设置 TextArea textArea = new TextArea("demo text 文本内容",6, 40); Panel panel = new Panel(); panel.setPreferredSize(new Dimension(400,300)); // 大小 PopupMenu popupMenu = new PopupMenu(); // 右键菜单 MenuItem commentMenuItem = new MenuItem("comment"); MenuItem cancelCommentMenuItem = new MenuItem("cancelComment"); MenuItem copyMenuItem = new MenuItem("copy"); MenuItem saveMenuItem = new MenuItem("save"); // 布局组装 popupMenu.add(commentMenuItem); popupMenu.add(cancelCommentMenuItem); popupMenu.add(saveMenuItem); popupMenu.add(copyMenuItem); panel.add(popupMenu); Box verticalBox = Box.createVerticalBox(); verticalBox.add(textArea); verticalBox.add(panel); frame.add(verticalBox, BorderLayout.CENTER); // 事件监听设置 ActionListener actionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); textArea.append(" 您右键菜单选择的是:" + actionCommand); } }; commentMenuItem.addActionListener(actionListener); cancelCommentMenuItem.addActionListener(actionListener); copyMenuItem.addActionListener(actionListener); saveMenuItem.addActionListener(actionListener); // 鼠标右键监听设置 panel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { // super.mouseReleased(e); boolean popupTrigger = e.isPopupTrigger(); if (popupTrigger) { // 参数1 所属的父组件对象, popupMenu.show(panel, e.getX(), e.getY()); } } }); frame.pack(); frame.setVisible(true); } }
效果:
