将鼠标事件传递给Java UI后面的应用程序

Var*_*run 3 java mouse events transparency

我的问题与如何将鼠标事件传递给我在C#/ Vista中的应用程序中的要求完全相同,但我对透明Java UI也需要相同的东西.我可以使用6.0轻松创建透明的Java UI,但无法获得有关通过应用程序将事件传递给后面的任何应用程序(例如浏览器)的任何信息.

Sav*_*sis 5

我相信这会回答你的问题.要运行它,您需要Java 6更新10及更高版本.我在Windows Vista上测试过它

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ClickThrough {

    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame f = new JFrame("Test");
        f.setAlwaysOnTop(true);
        Component c = new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D)g.create();
                g2.setColor(Color.gray);
                int w = getWidth();
                int h = getHeight();
                g2.fillRect(0, 0, w,h);
                g2.setComposite(AlphaComposite.Clear);
                g2.fillRect(w/4, h/4, w-2*(w/4), h-2*(h/4));
            }
        };
        c.setPreferredSize(new Dimension(300, 300));
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
        com.sun.awt.AWTUtilities.setWindowOpaque(f,false);
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要具有未修饰的窗口或仅由Java装饰的窗口(不是默认的OS装饰),否则代码将无法工作.