java可通过jframe中的非透明组件单击

java可通过jframe中的非透明组件单击,java,linux,swing,transparent,always-on-top,Java,Linux,Swing,Transparent,Always On Top,OS=Ubuntu;JDK=1.7.0_10 概述: 我想要的是一些常用的桌面小部件(例如compiz或gromit的注解),有没有办法用Java实现 我想创建一个jframe或窗口,使其全屏、透明、可点击并且始终位于顶部。 在jframe中,我想添加/删除要定位在屏幕特定点上的组件(文本、图像、矩形…)。这些组件应该是非分散的,并且始终位于顶部。如果可能,他们应该允许点击通过 例如: 我在桌面上打开了几个应用程序。 我想在窗口周围自动画一个框,这个框在焦点上。在窗口周围画一个矩形,矩形的区域应

OS=Ubuntu;JDK=1.7.0_10

概述:

我想要的是一些常用的桌面小部件(例如compiz或gromit的注解),有没有办法用Java实现

我想创建一个jframe或窗口,使其全屏、透明、可点击并且始终位于顶部。 在jframe中,我想添加/删除要定位在屏幕特定点上的组件(文本、图像、矩形…)。这些组件应该是非分散的,并且始终位于顶部。如果可能,他们应该允许点击通过

例如: 我在桌面上打开了几个应用程序。 我想在窗口周围自动画一个框,这个框在焦点上。在窗口周围画一个矩形,矩形的区域应该是透明的,可以点击,这样我就可以使用我的应用程序了

问题:

我可以创建一个透明的框架,它保持在顶部,但不可点击,但我将在框架上添加的组件在任何情况下都是透明的

JFrame frame = new JFrame("MyFrame");
frame.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setLocation(0,0);
frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(true);
//frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);     //apple
frame.getContentPane().setLayout(new BorderLayout());
System.setProperty("sun.java2d.noddraw", "true");
AWTUtilities.setWindowOpaque(frame, false);
AWTUtilities.setWindowOpacity(frame, 0.0f);
JLabel label = new JLabel("Hello NOT transparent label");
label.setOpaque(true);
label.setBackground(new Color(255, 0, 0));
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
通过设置从URL加载的透明图像的图标图像,我可以使框架透明并可点击。 如果图像是从URL加载的,但如果我从本地文件加载图像(为什么?!?)。 同样在这种情况下,将零部件添加到框架时也不会显示

try {
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(new URL("http://i.imgur.com/xtZK0.png")));
} catch (MalformedURLException e) {e.printStackTrace();}
我尝试添加JFXPanel,但没有成功,我尝试将组件添加到GlassPane,但没有成功

经过一周的密集测试和搜索,我希望有人能给我一个解决方案或正确的提示


谢谢。

我怀疑Java是否适合这种语言。