«Импровизировать» ввод с клавиатуры в Java - PullRequest
0 голосов
/ 08 января 2012

Я хочу создать полностью прозрачный JFrame. Теперь представьте, что размер JFrame соответствует точному размеру игрового клиента (или любого другого приложения). Как бы я сделал так, чтобы при нажатии на прозрачный JFrame нажатие мыши на JFrame каким-то образом передавалось игровому клиенту.

Клики по JFrame -> что-то (?) -> При щелчке по окну под JFrame

Если вы хотите, чтобы я разъяснил, пожалуйста, спросите. Спасибо!

Примечание: для тех из вас, кто интересуется, я не делаю регистратор ключей или что-либо, что может быть вредным для всех.

Редактировать: Я получаю ошибку StackOverflowError с этим кодом в одной из последних строк, которая говорит super.dispatchEvent(evt);

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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...