首页>代码>Java awt实现的类似弹弹堂的小游戏>/Grndzero/src/RepeatingReleasedEventsFixer.java
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   RepeatingReleasedEventsFixer.java

import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.Timer;

public class RepeatingReleasedEventsFixer
    implements AWTEventListener
{
    private class ReleasedAction
        implements ActionListener
    {

        void cancel()
        {
            if(!$assertionsDisabled && !RepeatingReleasedEventsFixer.assertEDT())
            {
                throw new AssertionError();
            } else
            {
                _timer.stop();
                _timer = null;
                _map.remove(Integer.valueOf(_originalKeyEvent.getKeyCode()));
                return;
            }
        }

        public void actionPerformed(ActionEvent e)
        {
            if(!$assertionsDisabled && !RepeatingReleasedEventsFixer.assertEDT())
                throw new AssertionError();
            if(_timer == null)
            {
                return;
            } else
            {
                cancel();
                KeyEvent newEvent = new RepostedKeyEvent((Component)_originalKeyEvent.getSource(), _originalKeyEvent.getID(), _originalKeyEvent.getWhen(), _originalKeyEvent.getModifiers(), _originalKeyEvent.getKeyCode(), _originalKeyEvent.getKeyChar(), _originalKeyEvent.getKeyLocation());
                Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(newEvent);
                return;
            }
        }

        private final KeyEvent _originalKeyEvent;
        private Timer _timer;

        static final boolean $assertionsDisabled = true;


        ReleasedAction(KeyEvent originalReleased, Timer timer)
        {
     
            _timer = timer;
            _originalKeyEvent = originalReleased;
        }
    }

    public static interface Reposted
    {
    }

    public static class RepostedKeyEvent extends KeyEvent
        implements Reposted
    {

        private static final long serialVersionUID = 0x74600317e50e6d68L;

        public RepostedKeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar, 
                int keyLocation)
        {
            super(source, id, when, modifiers, keyCode, keyChar, keyLocation);
        }
    }


    public RepeatingReleasedEventsFixer()
    {
    }

    public void install()
    {
        Toolkit.getDefaultToolkit().addAWTEventListener(this, 8L);
    }

    public void remove()
    {
        Toolkit.getDefaultToolkit().removeAWTEventListener(this);
    }

    public void eventDispatched(AWTEvent event)
    {
        if( !(event instanceof KeyEvent))
            throw new AssertionError("Shall only listen to KeyEvents, so no other events shall come here");
        if(!assertEDT())
            throw new AssertionError();
        if(event instanceof Reposted)
            return;
        if(event.getID() == 400)
            return;
        KeyEvent keyEvent = (KeyEvent)event;
        if(keyEvent.isConsumed())
            return;
        if(keyEvent.getID() == 402)
        {
            Timer timer = new Timer(2, null);
            ReleasedAction action = new ReleasedAction(keyEvent, timer);
            timer.addActionListener(action);
            timer.start();
            _map.put(Integer.valueOf(keyEvent.getKeyCode()), action);
            keyEvent.consume();
        } else
        if(keyEvent.getID() == 401)
        {
            ReleasedAction action = (ReleasedAction)_map.remove(Integer.valueOf(keyEvent.getKeyCode()));
            if(action != null)
                action.cancel();
        } else
        {
            throw new AssertionError("All IDs should be covered.");
        }
    }

    private static boolean assertEDT()
    {
        if(!EventQueue.isDispatchThread())
            throw new AssertionError((new StringBuilder("Not EDT, but [")).append(Thread.currentThread()).append("].").toString());
        else
            return true;
    }

    private final Map _map = new HashMap();




}
最近下载更多
1014422538  LV1 2022年10月7日
1813612654  LV9 2020年10月31日
stonepoiu  LV1 2020年6月22日
jdczuidaima  LV16 2020年5月28日
kkkxyh  LV13 2020年5月26日
孙龙52  LV6 2020年3月20日
xey1336211500  LV1 2020年3月8日
WWWWDFSADFSDCccc  LV4 2020年1月13日
朱丽爱成成  LV1 2020年1月5日
13950090228  LV1 2019年12月18日
最近浏览更多
微信网友_6751133665382400 2023年11月25日
暂无贡献等级
jkjfdgbkl  LV2 2023年11月2日
1014422538  LV1 2022年10月7日
迷迭香  LV10 2022年9月21日
agjbvfhjbg  LV6 2022年9月11日
喃喵xxxx  LV6 2022年4月20日
zhoukun12 2021年12月20日
暂无贡献等级
522484651  LV1 2021年11月16日
anAdmin  LV5 2021年10月27日
qsyqa0  LV6 2021年9月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友