java可点击式透明非透明组件,位于透明的可点击式jframe中

时间:2013-01-09 16:56:51

标签: java linux swing transparent always-on-top

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

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

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

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

感谢。

0 个答案:

没有答案