前面讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定的功能,在AWT中,菜单相关组件的使用和之前学习的组件是一模一样的,只需要把菜单条、菜单、菜单项组合到一起,按照一定的布局,放入到容器中即可。
下表中给出常见的菜单相关组件:
菜单组件名称 |
功能 |
MenuBar |
菜单条 , 菜单的容器 。 |
Menu |
菜单组件 , 菜单项的容器 。 它也是Menultem的子类 ,所以可作为菜单项使用 |
PopupMenu |
上下文菜单组件(右键菜单组件) |
Menultem |
菜单项组件 。 |
CheckboxMenuItem |
复选框菜单项组件 |
下图是常见菜单相关组件集成体系图:
菜单相关组件使用:
1.准备菜单项组件,这些组件可以是MenuItem及其子类对象
2.准备菜单组件Menu或者PopupMenu(右击弹出子菜单),把第一步中准备好的菜单项组件添加进来;
3.准备菜单条组件MenuBar,把第二步中准备好的菜单组件Menu添加进来;
4.把第三步中准备好的菜单条组件添加到窗口对象中显示。
小技巧:
1.如果要在某个菜单的菜单项之间添加分割线,那么只需要调用Menu的add(new MenuItem(-))即可。
2.如果要给某个菜单项关联快捷键功能,那么只需要在创建菜单项对象时设置即可,例如给菜单项关联 ctrl+shif+/ 快捷键,只需要:new MenuItem(“菜单项名字”,new MenuShortcut(KeyEvent.VK_Q,true);
案例1:
使用awt中常用菜单组件,完成下图效果
演示代码1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
public class SimpleMenu { private Frame frame = new Frame("这里测试菜单相关组件"); private MenuBar menuBar = new MenuBar(); private Menu fileMenu = new Menu("文件"); private Menu editMenu = new Menu("编辑"); private MenuItem newItem = new MenuItem("新建"); private MenuItem saveItem = new MenuItem("保存"); private MenuItem exitItem = new MenuItem("退出");
private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");
private MenuItem copyItem = new MenuItem("复制");
private MenuItem pasteItem = new MenuItem("粘贴");
private Menu formatMenu = new Menu("格式");
private MenuItem commentItem = new MenuItem("注释"); private MenuItem cancelItem = new MenuItem("取消注释");
private TextArea ta = new TextArea(6, 40);
public void init(){ ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); ta.append("单击“"+command+"”菜单\n"); if (command.equals("退出")){ System.exit(0); } } }; commentItem.addActionListener(listener); exitItem.addActionListener(listener);
fileMenu.add(newItem); fileMenu.add(saveItem); fileMenu.add(exitItem);
editMenu.add(autoWrap); editMenu.add(copyItem); editMenu.add(pasteItem);
formatMenu.add(commentItem); formatMenu.add(cancelItem);
editMenu.add(new MenuItem("-")); editMenu.add(formatMenu);
menuBar.add(fileMenu); menuBar.add(editMenu);
frame.setMenuBar(menuBar);
frame.add(ta);
frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new SimpleMenu().init(); } }
|
案例2:
通过PopupMenu实现下图效果:
实现思路:
1.创建PopubMenu菜单组件;
2.创建多个MenuItem菜单项,并添加到PopupMenu中;
3.将PopupMenu添加到目标组件中;
4.为需要右击出现PopubMenu菜单的组件,注册鼠标监听事件,当监听到用户释放右键时,弹出菜单。
演示代码2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;
public class PopupMenuTest { private Frame frame = new Frame("这里测试PopupMenu"); private PopupMenu popupMenu = new PopupMenu(); private MenuItem commentItem = new MenuItem("注释"); private MenuItem cancelItem = new MenuItem("取消注释"); private MenuItem copyItem = new MenuItem("复制"); private MenuItem pasteItem = new MenuItem("保存"); private TextArea ta = new TextArea("我爱中华!!!", 6, 40); private Panel panel = new Panel();
public void init() { popupMenu.add(commentItem); popupMenu.add(cancelItem); popupMenu.add(copyItem); popupMenu.add(pasteItem); panel.setPreferredSize(new Dimension(300, 100)); panel.add(popupMenu); panel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { boolean flag = e.isPopupTrigger(); if (flag) { popupMenu.show(panel, e.getX(), e.getY()); } } });
frame.add(ta);
frame.add(panel, BorderLayout.SOUTH);
frame.pack(); frame.setVisible(true); }
public static void main(String[] args) { new PopupMenuTest().init(); }
}
|
如果您有什么问题或建议可以在下方的评论区评论,我会及时回复的。
欢迎关注我的公众号,共同学习,共同提升!
您可以通过公众号向我留言,也可以通过邮箱(lklong@88.com)联系我