Я хочу создать полностью прозрачный 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);
}
}
}