2012-09-10 7 views
0

두 레이어가있는 JLayeredPane이 있습니다. 최상위 수준은 완전히 투명하며 마우스 이벤트를 캡처 한 유리 창으로 작동 한 다음 마우스 이벤트를 그 아래 창에 전달합니다. 맨 아래 계층은 알 수없는 이유로 올바르게 그려지지 않습니다. 페인팅 이벤트를 파견해야합니까?투명 레이어가있는 JLayeredPane이 잘못된 그리기를 발생시킵니다.

그런데 프레임의 유리 패널을 사용 하겠지만 나는 그걸 얻을 수 없습니다. 스윙 위에 구축 된 GUI 프레임 워크에서 제공하는 JPanel을 사용하여 막혔습니다. SwingUtilities를 사용하여 부모 프레임을 얻으려고했지만 항상 null을 반환합니다.

+3

보기 ... –

답변

1

Glasspane을 사용하고 Swing에서 이벤트를 캡처하려면 JLayer (Java 7)를 사용하십시오. Java 7을 사용하지 않으면 JXLayer (http://java.net/projects/jxlayer/)를 사용할 수 있습니다. 이것은이 동작을위한 새로운 스윙 기본 구성 요소입니다. 난 단지 알 수없는 대답을 제공 할 수있는, 알 수없는 이유로 및 알 수없는 코드에 대해

0

나는 매우 모호한 질문 인 Guillaune에 동의합니다. 그래서 당신은 당신이 가지고있는 방식대로하는 좋은 이유가있을 것입니다. 도움이된다면 그러나, 당신은 아마 모두 투명 층으로 처리 할 수 ​​있으며 단순히의 JLayeredPane에 직접 마우스 수신기를 연결 : 다음

JPanel jP = new JPanel(); 
JLayeredPane jLP = new JLayeredPane(); 
MouseAdapter mouse = new MouseAdapter(); 
jLP.addMouseListener(mouse); 

MouseAdapter 클래스 :

public class MouseAdapter{ 
    //Make sure you override the methods 
} 

다른 방법을, 한 꽤 정기적으로, 단순히의 JLayeredPane를 확장하고 구현의 MouseListener이다 사용

public class MyLayers extends JLayeredPane implements MouseListener 
{ 
    public MyLayers(){ 
    addMouseListener(this); 
    } 
//again make sure you override the methods 
} 

이것은 넷빈즈에서 "생성자이 누출"하지만 ignor를 던졌습니다 할 수 있는.