commandmenu.java

来自「开源(Open Source)项目JHotDraw的文档和源程序」· Java 代码 · 共 112 行

JAVA
112
字号
/*
 * @(#)CommandMenu.java 5.2
 *
 */

package CH.ifa.draw.util;

import javax.swing.*;
import java.awt.*;
import java.util.*;

/**
 * A Command enabled menu. Selecting a menu item
 * executes the corresponding command.
 *
 * @see Command
 */

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public  class CommandMenu
        extends JMenu implements ActionListener {

    private Vector   fCommands;

    public CommandMenu(String name) {
        super(name);
        fCommands = new Vector(10);
    }

    /**
     * Adds a command to the menu. The item's label is
     * the command's name.
     */
    public synchronized void add(Command command) {
        JMenuItem m = new JMenuItem(command.name());
        m.addActionListener(this);
        add(m);
        fCommands.addElement(command);
    }

    /**
     * Adds a command with the given short cut to the menu. The item's label is
     * the command's name.
     */
    public synchronized void add(Command command, MenuShortcut shortcut) {
        JMenuItem m = new JMenuItem(command.name(), shortcut.getKey());
        m.setName(command.name());
        m.addActionListener(this);
        add(m);
        fCommands.addElement(command);
    }

    public synchronized void remove(Command command) {
        System.out.println("not implemented");
    }

    public synchronized void remove(MenuItem item) {
        System.out.println("not implemented");
    }

    /**
     * Changes the enabling/disabling state of a named menu item.
     */
    public synchronized void enable(String name, boolean state) {
        for (int i = 0; i < getItemCount(); i++) {
            JMenuItem item = getItem(i);
            if (name.equals(item.getLabel())) {
                item.setEnabled(state);
                return;
            }
        }
    }

    public synchronized void checkEnabled() {
        int j = 0;
        for (int i = 0; i < getMenuComponentCount(); i++) {
            // ignore separators
            // a separator has a hyphen as its label
            if (getMenuComponent(i) instanceof JSeparator)
                continue;
            Command cmd = (Command)fCommands.elementAt(j);
            getMenuComponent(i).setEnabled(cmd.isExecutable());
            j++;
        }
    }

    /**
     * Executes the command.
     */
    public void actionPerformed(ActionEvent e) {
        int j = 0;
        Object source = e.getSource();
        for (int i = 0; i < getItemCount(); i++) {
            JMenuItem item = getItem(i);
            // ignore separators
            // a separator has a hyphen as its label
            if (getMenuComponent(i) instanceof JSeparator)
                continue;
            if (source == item) {
                Command cmd = (Command)fCommands.elementAt(j);
                cmd.execute();
                break;
            }
            j++;
        }
    }
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?