2011-03-08 4 views
1

JWindow의 배경을 완전히 투명하게 설정했습니다. 그런 다음 둥근 사각형 (RGB : 0,0,0,100)을 paint-Method에 그렸고 JLabel을 JWindows ContentPane에 추가했습니다. 그러나 JLindow를 다시 그리기 위해 JLindow를 다시 칠하려고하면 이전 Rectangle과 JLabel의 이전 값이 제거되지 않습니다. 따라서 결과적으로 내 커스텀 툴팁 상자 (투명도가 떨어짐)가 덜 투명 해지고 JLabels 내용을 읽을 수 없게됩니다. 이는 오래된 컨텍스트를 오버레이하기 때문입니다.JLabel over transparent painted 사각형?

이 문제를 해결할 수있는 방법이 있습니까?

BTW, 다시 그리지 않으면 덜 투명 해지지 않지만 다시 그리면 JLabel의 새로운 내용이 이전 내용을 덮어 씁니다.

답변

1

우선 대신 paint을 무시하고 super.paintComponent(g)으로 전화해야합니다. 최후의 계층의 컴퍼넌트가 이전의 내용을 클리어하기 (위해) 때문에, JWindow는 불투명 한 상태로 유지해야합니다. 모든 레이어가 투명하면 화면 가비지가 생깁니다.

painting with Swing을 참조하십시오. 아마도 translucent windows을 만들고 싶었을 것입니까?

+0

예, 반투명 창을 만들고 싶지만 Mac OS 10.6.6에서는 작동하지 않습니다. – esanits

+0

JWindow에는'paintComponent (Graphics g)'가 없지만'paintComponents (Graphics g)'가 있습니다. 하지만 내가 그것을 덮어 씌우면 아무 것도 칠하지 않니? – esanits

+0

콘텐츠 패널이'JPanel' 인 것 같아서, 당신 자신의 커스텀'JPanel'에 내용 페인트를 설정하고'paintComponent()'를 오버라이드 할 수 있습니다. 'Mac OS에서 반투명 창을 만들려면 어떻게해야합니까?'라는 질문 분명히 IMO에 물어볼 가치가있다. –