2

操作系统 = 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 加载的透明图像设置 IconImage 来使框架透明且可点击。如果图像是从 URL 加载的,但如果我从本地文件加载图像则不行(为什么?!?)。同样在这种情况下,当我将组件添加到框架时不会显示。

try {
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(new URL("http://i.imgur.com/xtZK0.png")));
} catch (MalformedURLException e) {e.printStackTrace();}

我尝试添加 JFXPanel 但没有成功,我尝试将组件添加到 GlassPane 但没有成功..

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

谢谢。

4

0 回答 0