⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboardadaptor.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: KeyboardAdaptor.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2004 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */package org.ofbiz.pos.adaptor;import java.awt.Component;import java.awt.Container;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import org.ofbiz.base.util.Debug;import org.apache.commons.collections.map.LinkedMap;/** * KeyboardAdaptor - Handles reading keyboard input * * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 5462 $ * @since      3.2 */public class KeyboardAdaptor {    public static final String module = KeyboardAdaptor.class.getName();    public static final int EVENT_RELEASED = 2;    public static final int EVENT_PRESSED = 1;    public static final int EVENT_TYPED = 3;    public static final int KEYBOARD_DATA = 100;    public static final int SCANNER_DATA = 101;    public static final int MSR_DATA = 102;    public static final int ALL_DATA = 999;    protected static List loadedComponents = new LinkedList();    protected static Map receivers = new LinkedMap();    protected static KeyboardAdaptor adaptor = null;    protected static boolean running = true;    protected KeyboardListener listener = null;    public static KeyboardAdaptor getInstance(KeyboardReceiver receiver, int dataType) {        if (adaptor == null) {            synchronized(KeyboardAdaptor.class) {                if (adaptor == null) {                    adaptor = new KeyboardAdaptor();                }            }        }        if (receiver != null && dataType > -1) {            receivers.put(receiver, new Integer(dataType));        }        return adaptor;    }    public static KeyboardAdaptor getInstance() {        return getInstance(null, -1);    }    public static void attachComponents(Component[] coms, boolean recurse) {        // check the adaptor        if (adaptor == null) {            KeyboardAdaptor.getInstance();        }        // add the new ones to listen on        if (adaptor != null && coms != null) {            adaptor.addComponents(coms, recurse);        }    }    public static void attachComponents(Component[] coms) {        KeyboardAdaptor.attachComponents(coms, true);    }    public static void attachComponents(Container parent, boolean recurse) {        KeyboardAdaptor.attachComponents(new Component[] { parent }, recurse);    }    public static void attachComponents(Container parent) {        KeyboardAdaptor.attachComponents(parent, true);    }    public static void stop() {        running = false;    }    private KeyboardAdaptor() {        this.listener = new KeyboardListener();        this.listener.setDaemon(false);        this.listener.setName(listener.toString());        this.listener.start();        KeyboardAdaptor.adaptor = this;    }    private void addComponents(Component[] coms, boolean recurse) {        listener.reader.configureComponents(coms, recurse);    }    private class KeyboardListener extends Thread {        private static final long MAX_WAIT = 100;        private List keyCodeData = new LinkedList();        private List keyCharData = new LinkedList();        private long lastKey = -1;        private KeyReader reader = null;        public KeyboardListener() {            this.reader = new KeyReader(this);        }        private int checkDataType(char[] chars) {            if (chars.length == 0) {                // non-character data from keyboard interface (i.e. FN keys, enter, esc, etc)                return KEYBOARD_DATA;            } else if (((int) chars[0]) == 2 && ((int) chars[chars.length - 1]) == 10) {                // test for scanner data                return SCANNER_DATA;            } else if (((int) chars[0]) == 37 && ((int) chars[chars.length - 1]) == 10) {                // test for MSR data                return MSR_DATA;            } else {                // otherwise it's keyboard data                return KEYBOARD_DATA;            }        }        protected synchronized void receiveCode(int keycode) {            keyCodeData.add(new Integer(keycode));        }        protected synchronized void receiveChar(char keychar) {            keyCharData.add(new Character(keychar));        }        protected synchronized void sendData() {            if (KeyboardAdaptor.receivers.size() > 0) {                if (keyCharData.size() > 0 || keyCodeData.size() > 0) {                    char[] chars = new char[keyCharData.size()];                    int[] codes = new int[keyCodeData.size()];                    for (int i = 0; i < codes.length; i++) {                        Integer itg = (Integer) keyCodeData.get(i);                        codes[i] = itg.intValue();                    }                    for (int i = 0; i < chars.length; i++) {                        Character ch = (Character) keyCharData.get(i);                        chars[i] = ch.charValue();                    }                    Iterator ri = KeyboardAdaptor.receivers.keySet().iterator();                    while (ri.hasNext()) {                        KeyboardReceiver receiver = (KeyboardReceiver) ri.next();                        int receiverType = ((Integer) receivers.get(receiver)).intValue();                        int thisDataType = this.checkDataType(chars);                        if (receiverType == ALL_DATA || receiverType == thisDataType) {                            receiver.receiveData(codes, chars);                        }                    }                    keyCharData = new LinkedList();                    keyCodeData = new LinkedList();                    lastKey = -1;                }            } else {                Debug.logWarning("No receivers configured for key input", module);            }        }        protected synchronized void sendEvent(int eventType, KeyEvent event) {            lastKey = System.currentTimeMillis();            if (KeyboardAdaptor.receivers.size() > 0) {                Iterator ri = KeyboardAdaptor.receivers.keySet().iterator();                while (ri.hasNext()) {                    KeyboardReceiver receiver = (KeyboardReceiver) ri.next();                    if (receiver instanceof KeyListener) {                        switch (eventType) {                            case 1:                                ((KeyListener) receiver).keyPressed(event);                                break;                            case 2:                                ((KeyListener) receiver).keyTyped(event);                                break;                            case 3:                                ((KeyListener) receiver).keyReleased(event);                                break;                            default:                                break;                        }                    }                }            }        }        public void run() {            while (running) {                long now = System.currentTimeMillis();                if ((lastKey > -1) && (now - lastKey) >= MAX_WAIT) {                    this.sendData();                }                if (!running) {                    break;                } else {                    try {                        Thread.sleep(MAX_WAIT);                    } catch (InterruptedException e) {                    }                }            }        }    }    class KeyReader implements KeyListener {        private KeyboardListener k;        public KeyReader(KeyboardListener k) {            this.k = k;        }        private void configureComponents(Component[] coms, boolean recurse) {            for (int i = 0; i < coms.length; i++) {                if (!loadedComponents.contains(coms[i])) {                    coms[i].addKeyListener(this);                    Debug.logInfo("Added [" + coms[i].getName() + "] to KeyboardAdaptor", module);                }                if (recurse && coms[i] instanceof Container) {                    Component[] nextComs = ((Container) coms[i]).getComponents();                    configureComponents(nextComs, true);                }            }        }        public void keyTyped(KeyEvent e) {            k.receiveChar(e.getKeyChar());            k.sendEvent(EVENT_TYPED, e);        }        public void keyPressed(KeyEvent e) {            k.receiveCode(e.getKeyCode());            k.sendEvent(EVENT_PRESSED, e);        }        public void keyReleased(KeyEvent e) {            k.sendEvent(EVENT_RELEASED, e);        }    }}

⌨️ 快捷键说明

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