jnodeeventqueue.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 87 行

JAVA
87
字号
/*
 * $Id: JNodeEventQueue.java,v 1.10 2004/02/26 21:17:16 lsantha Exp $
 */
package org.jnode.wt.desktop;

import org.jnode.wt.events.JNodeMouseEvent;
import org.jnode.wt.events.JNComponentEvent;

import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;


/**
 * @author vali
 */
public class JNodeEventQueue {
    /** The queued events */
    private final List events = new ArrayList();
    /** The event dispatcher thread */
    private final JNodeEventQueueThread dispatchThread = new JNodeEventQueueThread(this);

    /**
     * Initialize this instance.
     */
    public JNodeEventQueue() {
        dispatchThread.start();
    }

    /**
     * Posts a new event to the queue.
     *
     * @param evt
     *            The event to post to the queue.
     *
     */
    public synchronized void postEvent(JNodeEvent evt) {
        // if mouse move event than remove all the previos ones
        int id = evt.getID();
        if (
                id == JNodeMouseEvent.MOUSE_MOVED ||
                id == JNodeMouseEvent.MOUSE_DRAGGED ||
                id == JNComponentEvent.COMPONENT_MOVED ||
                id == JNComponentEvent.COMPONENT_RESIZED
        ) {

            aggregateEvents(evt);
        }

        events.add(evt);
        notify();
    }

    public synchronized void aggregateEvents(JNodeEvent event) {
        for (ListIterator iter = events.listIterator(); iter.hasNext();) {
            JNodeEvent element = (JNodeEvent) iter.next();
            if (element.getID() == event.getID())
                iter.remove();
        }
    }

    /**
     * Returns the next event in the queue. This method will block until an event is available or
     * until the thread is interrupted.
     *
     * @return The next event in the queue.
     *
     * @exception InterruptedException
     *                If this thread is interrupted while waiting for an event to be posted to the
     *                queue.
     */
    public synchronized JNodeEvent getNextEvent() throws InterruptedException {

        while (events.isEmpty()) {
            wait(1000);
        }

        return (JNodeEvent) events.remove(0);
    }

    protected void dispatchEvent(JNodeEvent evt) {
        if (evt.getSource() instanceof org.jnode.wt.components.JNComponent) {
            ((org.jnode.wt.components.JNComponent) evt.getSource()).dispatchEvent(evt);
        }
    }
}

⌨️ 快捷键说明

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