contextmenusource.java

来自「java实现浏览器等本地桌面的功能」· Java 代码 · 共 120 行

JAVA
120
字号
/* * $Id: ContextMenuSource.java,v 1.4 2005/10/13 08:59:57 kleopatra Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */package org.jdesktop.swingx.plaf;import java.awt.event.ActionEvent;import java.util.HashMap;import java.util.Map;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.ActionMap;import javax.swing.JComponent;import javax.swing.UIManager;/** * @author Jeanette Winzenburg */public abstract class ContextMenuSource {    private Map<String, String> names;    public abstract String[] getKeys();    public String getName(String actionKey) {        return getNames().get(actionKey);    }    public abstract void updateActionEnabled(JComponent component, ActionMap map);    /**     * returns an ActionMap for usage in default context menues.     * @param component     * @return     */    public ActionMap createActionMap(JComponent component) {        ActionMap map = new ActionMap();        String[] keys = getKeys();        for (int i = 0; i < keys.length; i++) {            if (keys[i] != null) {                Action action = createDelegateAction(component, keys[i]);                if (action != null) {                    map.put(keys[i], action);                }            }        }        return map;    }    protected Map<String, String> getNames() {        if (names == null) {            names = new HashMap<String, String>();            initNames(names);        }        return names;    }    protected String getValue(String key, String defaultValue) {        String value = UIManager.getString(getResourcePrefix() + key);        return value != null ? value : defaultValue;    }    protected abstract void initNames(Map<String, String> names);        protected abstract String getResourcePrefix();     protected Action createDelegateAction(JComponent component,            String actionKey) {        Action action = component.getActionMap().get(actionKey);        if (action != null) {         return new DelegateAction(getName(actionKey),                action, component);        }        return null;    }    public static class DelegateAction extends AbstractAction {        private Action delegatee;        private JComponent target;        public DelegateAction(String name, Action delegatee, JComponent target) {            super(name);            this.delegatee = delegatee;            this.target = target;        }        public void actionPerformed(ActionEvent e) {            delegatee.actionPerformed(createActionEvent(e));        }        private ActionEvent createActionEvent(ActionEvent e) {            if (target != null) {                return new ActionEvent(target, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers());            }            return e;        }    }}

⌨️ 快捷键说明

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