动态菜单栏

来源:互联网 发布:晨兴资本 知乎 编辑:程序博客网 时间:2024/05/22 14:52

根据角色和功能的关系矩阵,生成和管理菜单。


MyMenuBar 用String[] menuNames和String[][] menuItemNames分别描述菜单和菜单项。然后,按照角色和功能的关系矩阵,设置各菜单项的可见性。

每一个菜单项有自己的ActionListener对象,它们全部调用含有一个大分支结构的方法actionPerformed。

    private JMenuBar initMenuBar(JMenuBar mnb) {        for (int i = 0; i < menuNames.length; i++) {            JMenu menu = new JMenu(menuNames[i]);            for (String menuItemName : menuItemNames[i]) {                final JMenuItem menuItem = new JMenuItem(menuItemName);                menuItem.addActionListener((evt) -> actionPerformed(menuItemName));//                menuItem.addActionListener((evt) ->  actionPerformed(evt.getActionCommand())  );                menu.add(menuItem);            }            mnb.add(menu);        }        return mnb;    }

大分支结构的方法actionPerformed,如下:

    private void actionPerformed(String menuItemName) {        if (menuItemName == null) {            throw new java.lang.IllegalArgumentException();        }        switch (menuItemName) {            case "修改密码":                new PasswordEditDlg(true, user).setVisible(T);                break;            case "用户管理"://.......           
有没有想策略一下呢?至少目前不想,20几个策略类令人害怕。比如interface ShowStrategy{void init( User user);},策略一下挺麻烦的。

    private void actionPerformed(String menuItemName) {        ShowStrategy s = map.get(menuItemName);//Map<String,ShowStrategy> map        s.init(user);



0 0