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

📄 sensoreventagent.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    /**     * Gets the <code>SensorButtonListener</code> implementations bound to     * the given sensor and button.     *      * @param sensor the sensor of interest     * @param button the button of interest     * @return array of <code>SensorButtonListener</code> implementations     *  bound to the given sensor and button, or null     */    public SensorButtonListener[] getSensorButtonListeners(Sensor sensor,							   int button) {	if (sensor == null)	    throw new NullPointerException("\nsensor is null") ;	if (button >= sensor.getSensorButtonCount())	    throw new ArrayIndexOutOfBoundsException		("\nbutton " + button + " >= sensor button count " +		 sensor.getSensorButtonCount()) ;	SensorBinding sb = getSensorBinding(sensor) ;	if (sb == null)	    return null ;	ArrayList listeners = new ArrayList() ;	for (int i = 0 ; i < sb.buttonBindingsList.size() ; i++) {	    SensorButtonBinding sbb =		(SensorButtonBinding)sb.buttonBindingsList.get(i) ;	    if (sbb.listeners[button] != null)		listeners.add(sbb.listeners[button]) ;	}	if (listeners.size() == 0)	    return null ;	else	    return (SensorButtonListener[])listeners.toArray		(new SensorButtonListener[listeners.size()]) ;    }    /**     * Remove the SensorButtonListener from the given SensorBinding.     */    private void removeSensorButtonListener	(SensorBinding sb, SensorButtonListener listener) {	Iterator i = sb.buttonBindingsList.iterator() ;	while (i.hasNext()) {	    int instanceCount = 0 ;	    SensorButtonBinding sbb = (SensorButtonBinding)i.next() ;	    for (int j = 0 ; j < sbb.listeners.length ; j++) {		if (sbb.listeners[j] == listener)		    sbb.listeners[j] = null ;		else if (sbb.listeners[j] != null)		    instanceCount++ ;	    }	    if (instanceCount == 0) {		i.remove() ;	    }	}	listsDirty = true ;    }    /**     * Remove the given <code>SensorButtonListener</code> binding from the     * specified sensor.     *      * @param sensor the sensor from which to remove the listener     * @param listener the listener to be removed     */    public synchronized void removeSensorButtonListener	(Sensor sensor, SensorButtonListener listener) {        	if (sensor == null)	    throw new NullPointerException("\nsensor is null") ;	SensorBinding sb = getSensorBinding(sensor) ;	if (sb == null)	    return ;	removeSensorButtonListener(sb, listener) ;	if (sb.buttonBindingsList.size() == 0 &&	    sb.readBindingsList.size() == 0)	    removeSensorBinding(sensor) ;	listsDirty = true ;    }    /**     * Remove the given <code>SensorButtonListener</code> from all sensors.     *      * @param listener the listener to remove     */    public synchronized void removeSensorButtonListener	(SensorButtonListener listener) {	Iterator i = bindingsList.iterator() ;	while (i.hasNext()) {	    SensorBinding sb = (SensorBinding)i.next() ;	    removeSensorButtonListener(sb, listener) ;	    if (sb.buttonBindingsList.size() == 0 &&		sb.readBindingsList.size() == 0) {		i.remove() ;	    }	}	listsDirty = true ;    }    /**     * Creates a binding of the specified sensor to the given     * <code>SensorReadListener</code>.  The read listener is invoked     * every time <code>dispatchEvents</code> is called and a button     * listener is <i>not</i> invoked.     *      * @param sensor the sensor to be bound     * @param readListener the <code>SensorReadListener</code>     *  implementation     */    public synchronized void addSensorReadListener	(Sensor sensor, SensorReadListener readListener) {	if (sensor == null)	    throw new NullPointerException("\nsensor is null") ;	SensorBinding sb = getSensorBinding(sensor) ;	if (sb == null) {	    sb = new SensorBinding(sensor) ;	    bindingsList.add(sb) ;	}	sb.readBindingsList.add(readListener) ;	listsDirty = true ;    }    /**     * Gets the <code>SensorReadListeners</code> bound to the specified     * sensor.     *      * @param sensor the sensor of interest     * @return array of <code>SensorReadListeners</code> bound to the     *  given sensor, or null     */    public SensorReadListener[] getSensorReadListeners(Sensor sensor) {	if (sensor == null)	    throw new NullPointerException("\nsensor is null") ;	SensorBinding sb = getSensorBinding(sensor) ;	if (sb == null)	    return null ;	else if (sb.readBindingsList.size() == 0)	    return null ;	else	    return (SensorReadListener[])sb.readBindingsList.toArray		(new SensorReadListener[sb.readBindingsList.size()]) ;    }    /**     * Remove the SensorReadListener from the given SensorBinding.     */    private void removeSensorReadListener	(SensorBinding sb, SensorReadListener listener) {	Iterator i = sb.readBindingsList.iterator() ;	while (i.hasNext()) {	    if (((SensorReadListener)i.next()) == listener)		i.remove() ;	}	listsDirty = true ;    }    /**     * Remove the given <code>SensorReadListener</code> binding from the     * specified sensor.     *      * @param sensor the sensor from which to remove the listener     * @param listener the listener to be removed     */    public synchronized void removeSensorReadListener	(Sensor sensor, SensorReadListener listener) {        	if (sensor == null)	    throw new NullPointerException("\nsensor is null") ;	SensorBinding sb = getSensorBinding(sensor) ;	if (sb == null)	    return ;	removeSensorReadListener(sb, listener) ;	if (sb.buttonBindingsList.size() == 0 &&	    sb.readBindingsList.size() == 0)	    removeSensorBinding(sensor) ;	listsDirty = true ;    }    /**     * Remove the given <code>SensorReadListener</code> from all sensors.     *      * @param listener the listener to remove     */    public synchronized void removeSensorReadListener	(SensorReadListener listener) {	Iterator i = bindingsList.iterator() ;	while (i.hasNext()) {	    SensorBinding sb = (SensorBinding)i.next() ;	    removeSensorReadListener(sb, listener) ;	    if (sb.buttonBindingsList.size() == 0 &&		sb.readBindingsList.size() == 0) {		i.remove() ;	    }	}	listsDirty = true ;    }    /**     * Remove all sensor listeners bound to the given sensor.     */    public synchronized void removeSensorBinding(Sensor sensor) {	Iterator i = bindingsList.iterator() ;	while (i.hasNext()) {	    SensorBinding sb = (SensorBinding)i.next() ;	    if (sb.sensor == sensor) {		i.remove() ;		break ;	    }	}	listsDirty = true ;    }    /**     * Returns an array of references to all sensors that have been bound     * to listeners.     * @return an array of sensors, or null if no sensors have been bound     */    public Sensor[] getSensors() {	if (bindingsList.size() == 0)	    return null ;	Sensor[] s = new Sensor[bindingsList.size()] ;	for (int i = 0 ; i < bindingsList.size() ; i++)	    s[i] = ((SensorBinding)bindingsList.get(i)).sensor ;	return s ;    }    /**     * Copies binding lists to arrays for event dispatch.  This allows     * listeners to add or remove themselves or other listeners safely.     */     private synchronized void updateArrays() {	bindings = (SensorBinding[])bindingsList.toArray	    (new SensorBinding[bindingsList.size()]) ;	for (int i = 0 ; i < bindings.length ; i++) {	    bindings[i].updateArrays() ;	}    }    /**     * Reads all sensor button state and dispatches events to registered     * button and read listeners.  This method is intended to be called from     * the <code>processStimulus</code> implementation of a     * <code>Behavior</code> or the <code>pollAndProcessInput</code> method of     * an event-driven implementation of <code>InputDevice</code>.     */    public void dispatchEvents() {	long t1 = t0 ;	t0 = J3DTimer.getValue() ;        	if (listsDirty) {	    updateArrays() ;	    listsDirty = false ;	}	// Loop through all sensor bindings.	for (int k = 0 ; k < bindings.length ; k++) {	    SensorBinding sb = bindings[k] ;	    Sensor s = sb.sensor ;	    Transform3D read = sb.read ;	    int[] buttons = sb.buttons ;	    int dragButton = 0 ;	    boolean callReadListeners = true ;	    boolean callDraggedListener = false ;	    // Get this sensor's readings.	    s.getRead(read) ;	    s.lastButtons(buttons) ;	    // Dispatch button listeners.	    for (int j = 0 ; j < sb.buttonBindings.length ; j++) {		SensorButtonBinding sbb = sb.buttonBindings[j] ;		for (int i = 0 ; i < buttons.length ; i++) {		    if (sbb.listeners[i] == null)			continue ;		    // Check for button release.		    if (sbb.prevButtons[i]) {			if (buttons[i] == 0) {			    e.set(source, SensorEvent.RELEASED, s, read,				  buttons, i, t0, t1) ;			    sbb.listeners[i].released(e) ;			    sbb.prevButtons[i] = false ;			    sbb.buttonsHandled-- ;			}			else {			    callDraggedListener = true ;			    dragButton = i ;			}			callReadListeners = false ;		    }		    // Check for button press.		    // Ignore multiple button presses if not enabled;		    // otherwise, one listener is bound to all buttons.		    else if (buttons[i] == 1) {			if (sbb.buttonsHandled == 0 || sbb.multiButton) {			    e.set(source, SensorEvent.PRESSED, s, read,				  buttons, i, t0, t1) ;			    sbb.listeners[i].pressed(e) ;			    sbb.prevButtons[i] = true ;			    sbb.buttonsHandled++ ;			    callReadListeners = false ;			}		    }		}		if (callDraggedListener) {		    // One drag event even if multiple buttons down.		    // Called after all pressed() and released() calls.		    e.set(source, SensorEvent.DRAGGED, s, read, buttons,			  SensorEvent.NOBUTTON, t0, t1) ;		    sbb.listeners[dragButton].dragged(e) ;		}	    }	    // Dispatch read listeners.	    if (callReadListeners) {		e.set(source, SensorEvent.READ, s, read,		      buttons, SensorEvent.NOBUTTON, t0, t1) ;		for (int r = 0 ; r < sb.readBindings.length ; r++) {		    sb.readBindings[r].read(e) ;		}	    }	}    }    public String toString() {	String s = "SensorEventAgent@" + Integer.toHexString(hashCode()) ;	s += "\nsensor bindings:\n\n" ;	for (int i = 0 ; i < bindingsList.size() ; i++) {	    s += ((SensorBinding)bindingsList.get(i)).toString() + "\n" ;	}	return s ;    }}

⌨️ 快捷键说明

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