——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); } }
效果: