问题描述
- 当调用右键菜单以后,怎么才能再次使用编辑菜单?或者说让编辑菜单恢复?
-
import java.awt.CheckboxMenuItem;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class SimpleMenu {
private Frame f = new Frame("测试");
private MenuBar mb = new MenuBar();
PopupMenu pop = new PopupMenu();
MenuItem line = new MenuItem("-");
Menu file = new Menu("文件");
Menu edit = new Menu("编辑");
MenuItem newItem = new MenuItem("新建", new MenuShortcut(KeyEvent.VK_N));
MenuItem saveItem = new MenuItem("保存", new MenuShortcut(KeyEvent.VK_S));
MenuItem exitItem = new MenuItem("退出", new MenuShortcut(KeyEvent.VK_X));
CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");
MenuItem copyItem = new MenuItem("复制", new MenuShortcut(KeyEvent.VK_C));
MenuItem pasteItem = new MenuItem("粘贴", new MenuShortcut(KeyEvent.VK_V));
Menu format = new Menu("格式");
MenuItem commentItem = new MenuItem("注释", new MenuShortcut(
KeyEvent.VK_SLASH, true));
MenuItem cancelItem = new MenuItem("取消注释");
private TextArea ta = new TextArea(6, 40);public void init() { ActionListener menuListener = new ActionListener() { public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); ta.append("单击”" + cmd + "“菜单" + "n"); if (cmd.equals("退出")) { System.exit(0); } } }; ActionListener editListener = new ActionListener() { public void actionPerformed(ActionEvent e) { // 再次为编辑菜单里添加 自动换行 复制 粘贴组件 edit.add(autoWrap); edit.add(line); edit.add(copyItem); edit.add(pasteItem); // 格式菜单 format.add(commentItem); format.add(cancelItem); edit.add(line); // 将格式菜单加入编辑菜单成为二级菜单 edit.add(format); // 将文件、 编辑菜单 加入到mb 菜单条中 mb.add(file); mb.add(edit); // 为F窗口设置菜单条 f.setMenuBar(mb); } }; commentItem.addActionListener(menuListener); exitItem.addActionListener(menuListener); edit.addActionListener(editListener); // 为文件菜单添加 新建 保存退出组件 file.add(newItem); file.add(saveItem); file.add(exitItem); // 再次为编辑菜单里添加 自动换行 复制 粘贴组件 edit.add(autoWrap); edit.add(line); edit.add(copyItem); edit.add(pasteItem); // 格式菜单 format.add(commentItem); format.add(cancelItem); edit.add(line); // 将格式菜单加入编辑菜单成为二级菜单 edit.add(format); // 将文件、 编辑菜单 加入到mb 菜单条中 mb.add(file); mb.add(edit); // 为F窗口设置菜单条 f.setMenuBar(mb); final Panel p = new Panel(); // 添加鼠标右键监听器 ta.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { f.add(p); // 添加右键菜单功能。 pop.add(autoWrap); pop.add(line); pop.add(copyItem); pop.add(pasteItem); pop.add(line); pop.add(format); // 创建 panel 窗口,将右键菜单加入到p窗口中 p.setPreferredSize(new Dimension(600, 160)); p.add(pop); pop.show(p, e.getX(), e.getY()); } } }); // 将p窗口添加到f中 f.add(ta); // 以匿名内部类的形式创建事件监听器对象 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.pack(); f.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub new SimpleMenu().init(); }
}