如何在Java中使整个窗口成为Aero Glass?

4

我想编写一个小应用程序,但我希望整个窗口都是玻璃的,并且在其上方放置按钮和标签。在Java中是否可以实现这一点?

3个回答

8
假设Java SWT和相关工具不支持Windows Aero技术,您需要通过JNI调用本地API。您需要调用的本地API是:
DwmExtendFrameIntoClientArea(int windowHandle, MARGINS margins);

这个本地API可以在Windows Vista和Windows 7的DWMAPI.dll本地库中找到,并且在MSDN上有文档记录

关于如何调用此函数,网络上有很多文档。例如,这里有一篇关于C#中如何实现这一点的文章。那应该可以帮助你入门。


1
值得注意的是,SWT具有一些用于调用DwmExtendFrameIntoClientArea的内部API。这可能是解决此问题的起点。 - Judah Gabriel Himango

4
当然,这个功能高度依赖于平台(在这种情况下是Windows),因此需要使用JNI。
假设您已经检查过玻璃窗口是否启用。步骤如下:
  1. 确保窗口是分层的;
  2. 将玻璃框架扩展到客户端区域;
  3. 选择一个标识透明区域的颜色;
  4. 将该颜色设置为窗口背景。
步骤1-3是用C编写的。让HWND hwnd成为您想要玻璃化的窗口的句柄,让COLORREF color成为一种颜色(越不寻常越好):
// 1.
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
  SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
// 2.
MARGINS margins = {-1, -1, -1, -1};
DwmExtendFrameIntoClientArea(hwnd, &margins);
// 3.
SetLayeredWindowAttributes(hwnd, color, 0, LWA_COLORKEY);

第四步是简单的Java,类似于:
window.getContentPane().setBackground(color);

其中color是之前选择的颜色的Java版本。


-1

嗯。我认为所有Java GUI都必须直接或间接地显示在一个窗口中,这是一个重量级组件。不确定您是否可以使其透明/半透明。

尝试构建一个JFrame并将其背景颜色设置为new Color(255, 255, 255, 20),其中20是alpha值。这应该要么使其大部分透明 - 要么就无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接