u010442664 2014-01-18 15:16 采纳率: 0%
浏览 1448

当调用右键菜单以后,怎么才能再次使用编辑菜单?或者说让编辑菜单恢复?

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();
}

}

  • 写回答

1条回答

  • 啊升 2019-01-17 11:43
    关注

    改:pop.add(new CheckboxMenuItem("自动换行"));
    pop.addSeparator();
    pop.add(new MenuItem("复制"));
    pop.add(new MenuItem("粘贴"));
    pop.add(new MenuItem("-"));
    pop.add(new Menu("格式"));

    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)