如何用Java制作整个窗口的航空玻璃?

时间:2009-11-16 13:33:13

标签: java aero aero-glass

我正在尝试编写一个小应用程序,但我希望整个窗口都是玻璃,上面有按钮和标签。是否可以在Java中执行此操作?

3 个答案:

答案 0 :(得分:8)

假设Java SWT和朋友没有内置的Windows Aero技术支持,您将不得不通过JNI调用本机API。您需要调用的本机API是

DwmExtendFrameIntoClientArea(int windowHandle, MARGINS margins);

此本机API位于Windows Vista和Windows 7的DWMAPI.dll本机库中,并且为documented on MSDN

网上有很多关于如何调用此功能的文档。例如,这是一篇关于doing this in C#的文章。这应该让你开始。

答案 1 :(得分:4)

当然这个功能高度依赖于平台(Windows,在这种情况下),因此需要JNI。

假设您已经检查过启用了玻璃窗口。步骤是:

  1. 确保窗口是分层的;
  2. 将玻璃框架延伸到客户区;
  3. 选择标识透明区域的颜色;
  4. 将该颜色设置为窗口背景。
  5. 步骤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版本。

答案 2 :(得分:-1)

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

尝试构建JFrame并将其背景颜色设置为new Color(255, 255, 255, 20)左右,其中20是alpha。这应该使它大部分透明 - 否则它将无效。