4

我正在尝试编写一个小型应用程序,但我希望整个窗口都是玻璃,上面有按钮和标签。是否有可能在 Java 中做到这一点?

4

3 回答 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. 确保窗口是分层的;
  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);

第 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 回答