1.MenuBar类 是菜单条
2.Menu类 是菜单条中的选项
3.MenuItem类 是菜单(Menu类)的选项
(一)菜单绘制
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.event.KeyEvent;
public class MenU {
Frame f = new Frame("Menutest");
//菜单条
MenuBar mb = new MenuBar();
//菜单
Menu file = new Menu("文件");
Menu edit = new Menu("编辑");
//菜单选项
MenuItem newItem = new MenuItem("新建");
MenuItem saveItem = new MenuItem("保存");
MenuItem closeItem = new MenuItem("关闭",new MenuShortcut(KeyEvent.VK_X)); //设置快捷键CTRL+X
public void init()
{
/*Menu加入MenuBar中*/
mb.add(file);
mb.add(edit);
file.add(newItem);
/*MenuItem 加入 Menu中*/
file.add(saveItem);
file.addSeparator(); //加下划线
file.add(closeItem);
f.setMenuBar(mb); //窗口f中加入菜单跳
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new MenU().init();
}
}
效果:
(二)二级菜单绘制
*:二级菜单就是 把 Menu对象加入 Menu对象中就行了。
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.event.KeyEvent;
public class MenU {
Frame f = new Frame("Menutest");
//菜单条
MenuBar mb = new MenuBar();
//菜单
Menu file = new Menu("文件");
Menu edit = new Menu("编辑");
Menu javaFile = new Menu("java文件");
//菜单选项
MenuItem newItem = new MenuItem("新建");
MenuItem saveItem = new MenuItem("保存");
MenuItem closeItem = new MenuItem("关闭",new MenuShortcut(KeyEvent.VK_X)); //设置快捷键CTRL+X
MenuItem javaClass = new MenuItem("java类文件");
MenuItem javaPacket = new MenuItem("java包");
public void init()
{
/*Menu加入MenuBar中*/
mb.add(file);
mb.add(edit);
file.add(newItem);
/*MenuItem 加入 file Menu中*/
file.add(saveItem);
file.addSeparator(); //加下划线
file.add(closeItem);
/*Menu加入Menu,形成二级菜单*/
file.add(javaFile);
javaFile.add(javaClass);
javaFile.add(javaPacket);
f.setMenuBar(mb); //窗口f中加入菜单跳
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new MenU().init();
}
}
*:实现此功能,需要实现PopupMenu对象
*:要创建一块 Panel 来装PopupMenu。
public class MenU {
Frame f = new Frame("Menutest");
Panel p = new Panel();
PopupMenu pop = new PopupMenu();
//MenuItem
MenuItem copyItem = new MenuItem("复制");
MenuItem plaItem = new MenuItem("粘贴");
public void init()
{
p.setPreferredSize(new Dimension(300,160));//设置Panel的大小
p.add(pop);
/*往Panel中添加鼠标监听器*/
p.addMouseListener(new MouseAdapter()
{
//鼠标释放
public void mouseReleased(MouseEvent e)
{
//若释放的是鼠标右键
if(e.isPopupTrigger())
{
pop.show(p, e.getX(), e.getY()); //右键菜单出现在鼠标的X,Y坐标
}
}
});
//MenuItem 加入PopupMenu中
pop.add(copyItem);
pop.add(plaItem);
f.add(p,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new MenU().init();
}
}
(四)菜单选项点击触发
当点击新建,保存,关闭时,会触发相应事件。下面的例子代码触发的是在文本框中显示菜单选项的名字
public class MenU {
Frame f = new Frame("Menutest");
TextArea ta = new TextArea(6,40);
//菜单条
MenuBar mb = new MenuBar();
//菜单
Menu file = new Menu("文件");
Menu edit = new Menu("编辑");
//菜单选项
MenuItem newItem = new MenuItem("新建");
MenuItem saveItem = new MenuItem("保存");
MenuItem closeItem = new MenuItem("关闭",new MenuShortcut(KeyEvent.VK_X)); //设置快捷键CTRL+X
public void init()
{
/*Menu加入MenuBar中*/
mb.add(file);
mb.add(edit);
file.add(newItem);
/*MenuItem 加入 Menu中*/
file.add(saveItem);
file.addSeparator(); //加下划线
file.add(closeItem);
/*(用Lambda表达式)实现包含点击操作的ActionListener监听器*/
ActionListener menuListener = e->
{
String cmd = e.getActionCommand();
ta.append(cmd);
};
/*按钮加入ActionListener监听器*/
newItem.addActionListener(menuListener);
saveItem.addActionListener(menuListener);
closeItem.addActionListener(menuListener);
f.add(ta,BorderLayout.SOUTH);
f.setMenuBar(mb); //窗口f中加入菜单跳
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new MenU().init();
}
}