Java中的'即兴'键盘输入

时间:2012-01-08 05:48:01

标签: java mouse jframe keypress

我想创建一个完全透明的JFrame。现在想象一下,我将JFrame的大小设置为游戏客户端(或任何其他应用程序)的确切大小。我如何做到这一点,当我点击透明的JFrame时,JFrame上的鼠标按键以某种方式转移到游戏客户端。

点击JFrame - >某事(?) - >单击JFrame下的窗口

如果您要我澄清请询问。 谢谢!

注意:对于那些你想知道的人,我不会制作一个关键记录器或任何有害的东西。

编辑:我在最后一行显示super.dispatchEvent(evt);

时收到此代码的StackOverflowError
package mtus.personal.record;

import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.swing.JFrame;

public class TransparentWindowTest
{

    public static void main(String[] args)
    {
        final CustomEventQueue queue = new CustomEventQueue();
        Toolkit.getDefaultToolkit().getSystemEventQueue().push(queue);

        JFrame frame = new JFrame("Test");

        frame.setSize(1000, 600);
        frame.setUndecorated(true);
        frame.addMouseListener(new MouseListener()
        {

            @Override
            public void mouseClicked(MouseEvent evt)
            {
                queue.dispatchEvent(evt);
            }

            @Override
            public void mouseEntered(MouseEvent evt)
            {

            }

            @Override
            public void mouseExited(MouseEvent evt)
            {

            }

            @Override
            public void mousePressed(MouseEvent evt)
            {

            }

            @Override
            public void mouseReleased(MouseEvent evt)
            {

            }

            });

        try
        {
            Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
            Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
            mSetWindowOpacity.invoke(null, frame, Float.valueOf(0.1f));
        } catch (NoSuchMethodException ex)
        {
            ex.printStackTrace();
        } catch (SecurityException ex)
        {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex)
        {
            ex.printStackTrace();
        } catch (IllegalAccessException ex)
        {
            ex.printStackTrace();
        } catch (IllegalArgumentException ex)
        {
            ex.printStackTrace();
        } catch (InvocationTargetException ex)
        {
            ex.printStackTrace();
        }

        frame.setVisible(true);
    }

    private static class CustomEventQueue extends EventQueue
    {

        @Override
        public void dispatchEvent(AWTEvent evt)
        {
            super.dispatchEvent(evt);
        }
    }
}

0 个答案:

没有答案