我正在尝试编写一个小应用程序,但我希望整个窗口都是玻璃,上面有按钮和标签。是否可以在Java中执行此操作?
答案 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-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。这应该使它大部分透明 - 否则它将无效。