2009-11-16 7 views

답변

-1

흠. 모든 Java GUI는 직접 또는 간접적으로 Window에 표시되어야하며 이는 중량 구성 요소라고 생각합니다. 투명/반투명으로 만들 수 있는지는 확실하지 않습니다.

JFrame을 빌드하고 배경색을 new Color(255, 255, 255, 20) 정도 (20은 알파)로 설정해보십시오. 그것은 대부분 투명하게 만들거나 작동하지 않을 것입니다.

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

SWT에는 DwmExtendFrameIntoClientArea를 호출하기위한 몇 가지 내부 API가 있습니다. 이것이 이것을 알아내는 출발점 일 수 있습니다. 명확성을 위해 –

4

물론이 기능은 플랫폼에 크게 의존하므로 (이 경우 Windows) JNI가 필요합니다.

이미 유리창이 사용 설정되어 있는지 확인했다고 가정합니다. 단계는 다음과 같습니다.

  1. 창이 겹쳐져 있는지 확인하십시오.
  2. 유리 프레임을 클라이언트 영역으로 확장하십시오.
  3. 투명 영역을 식별하는 색상을 선택하십시오.
  4. 은 창 배경으로 해당 색을 설정합니다.

    // 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 단계는 다음과 같습니다

1-3 단계는 COLORREF color 색상 (더 특별한, 최고) glassify 및 수 있도록 할 윈도우에 대한 핸들 HWND hwnd하자 C로 작성되어 color 이전에 선택한 색상의 자바 버전입니다 간단한 자바,

window.getContentPane().setBackground(color); 

같은.

+0

+1. –