2009-07-29 8 views
3

this 기사를 사용하십시오. 투명한 창을 만들려고합니다.AWTUtilities 투명 JFrame

프레임의 레이블 안에 하나의 이미지가 있습니다. 이미지가 보이지만 프레임이 보이지 않게하고 싶습니다. 내가


try { 
    Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
    Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); 
    mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f)); 
} catch (NoSuchMethodException ex) { 
    ex.printStackTrace(); 
} catch (SecurityException ex) { 
    ex.printStackTrace(); 
} catch (ClassNotFoundException ex) { 
    ex.printStackTrace(); 
} catch (IllegalAccessException ex) { 
    ex.printStackTrace(); 
} catch (IllegalArgumentException ex) { 
    ex.printStackTrace(); 
} catch (InvocationTargetException ex) { 
    ex.printStackTrace(); 
} 

를 사용하는 경우

그것은 투명 모든게 투명하지 구성 요소를 유지할 수 있습니다.

답변

1

프레임의 배경색에 대해 알파 채널을 설정하면 구성 요소로 내려 가면 안됩니다.

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25)); 

은 흰색 투명 창을 제공해야합니다.

+1

감사합니다. 이 기능은 저에게 큰 도움이됩니다 ... Mac OS X에서는 다른 플랫폼에서도 작동합니까? 투명 창에 대한 연구에서 다른 플랫폼에서 다른 기술이 필요하다고 말하는 기사가 많이 있습니다. http://explodingpixels.wordpress.com/2009/06/19/hud-on-windows-finally/ – slothbear

0

당신은 자식 요소의 불투명도를 설정하는 프레임이 불투명하지 않고, 그들을 불투명하게됩니다

childComponent.setOpaque(true); 

뭔가를해야합니다.

1

여전히 AWTUtilities 클래스를 사용할 수 있지만 setWindowOpacity() setWindowOpaque()로 불투명도를 설정하는 대신. 이렇게하면 창 배경이 꺼지 겠지만 창 안쪽에 그려진 내용은 이전과 마찬가지로 그려집니다. 최근 Java 6 업데이트에서 이제는 올바른 방법입니다. AWTUtilities는 Mac & MS Windows에서 모두 작동합니다. 이 메소드는 Java 7에서 java.awt.Window 자체로 이동합니다.

0

다음과 같이 이전 대답을 확장하고 싶습니다. 그러면 0.05 투명도 또는 255 중 12.75의 창이 생성됩니다. 그러면 구성 요소가 0.50f의 투명도로 설정되어 클릭 할 수있는 구성 요소에만 영향을 미칩니다. 라벨과 같이 클릭 할 수 없도록 설정하면 투명도가 지금까지 설정된 값으로 설정 될 수 있습니다. 그러나 이것은 색상을 변경하는 클릭 가능한 구성 요소 문제를 패치합니다.

JWindow subFrame = new JWindow();   
subFrame.setBounds(0, 0, 500, 500); 
subFrame.setAlwaysOnTop(true); 
subFrame.setOpacity(0.50f); 
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f)); 

JButton button = new JButton("Hello"); 
button.setBounds(20, 180, 100, 40); 

subFrame.getContentPane().setLayout(null); 
subFrame.getContentPane().add(button); 
subFrame.setVisible(true);