我正在尝试编写一个小型应用程序,但我希望整个窗口都是玻璃,上面有按钮和标签。是否有可能在 Java 中做到这一点?
问问题
2338 次
3 回答
8
假设 Java SWT 和朋友没有对 Windows Aero 技术的内置支持,您将不得不通过 JNI 调用本机 API。您需要调用的本机 API 是
DwmExtendFrameIntoClientArea(int windowHandle, MARGINS margins);
此原生 API 可在 Windows Vista 和 Windows 7 的 DWMAPI.dll 原生库中找到,并记录在 MSDN 上。
网上有很多关于如何调用这个函数的文档。例如,这是一篇关于在 C# 中执行此操作的文章。那应该让你开始。
于 2009-11-16T14:14:05.443 回答
4
当然,此功能高度依赖于平台(在本例中为 Windows),因此需要 JNI。
假设您已经检查了玻璃窗是否已启用。步骤是:
- 确保窗口是分层的;
- 将玻璃框架延伸到客户区;
- 选择标识透明区域的颜色;
- 将该颜色设置为窗口背景。
步骤 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);
第 4 步是简单的 Java,类似于
window.getContentPane().setBackground(color);
color
之前选择的颜色的 Java 版本在哪里。
于 2011-12-12T16:31:09.730 回答
-1
唔。我认为所有 Java GUI 都必须直接或间接地显示在 aWindow
中,这是一个重量级的组件。不确定是否可以使其透明/半透明。
尝试构建一个 JFrame 并将其背景颜色设置为new Color(255, 255, 255, 20)
20 左右,其中 20 是 alpha。这应该要么使它大部分透明 - 要么它不会工作。
于 2009-11-16T13:44:34.317 回答