2011-11-23 2 views
2

사용자 정의 투명도를 JPanel 상단에 오버레이하려고합니다. 두 구성 요소가 계층화 된 창의 가장자리까지 확장되도록합니다. 오버레이를 표시하고 싶을 때를 제외하고는 일반적으로 아무 것도하지 않기 위해 상단 구성 요소의 paintComponent 메서드를 재정의했습니다. 그런 다음 해당 텍스트를 적절한 위치에 그립니다. 여기하나의 패널에 여러 구성 요소를 오버레이하는 적절한 방법입니까?

은 레이아웃 문제에 대한 내 솔루션입니다 :

JLayeredPane jlp = new JLayeredPane(); 
jlp.setLayout(new OverlayLayout(jlp) { 
    @Override 
    public void layoutContainer(Container target) { 
     for (Component c: target.getComponents()) 
      c.setBounds(0, 0, target.getWidth(), target.getHeight()); 
    } 
}); 

질문은 - layoutContainer을 무시하지 않고이 작업을 수행 할 수있는 더 나은 방법이 있나요? 이것은 나에게 해킹처럼 보인다. 내 말은, 실제로 구성 요소를 배치 할 때이 작업을 수행 할 수있는 옵션이 없다는 것을 믿을 수 없습니다. 그러나 메서드를 재정의하지 않으면 위쪽과 왼쪽에 간격이 생깁니다.

여기에 뭔가가 누락되었거나 이러한 요구 사항을 처리하는 적절한 방법입니까?

답변

2

OverlayLayout은 사용 가능한 전체 공간을 채우기 위해 모든 구성 요소의 크기를 조정하도록 설계되지 않았습니다. 실제로 사용자 정의 된 레이아웃 관리자를 만들었습니다. 이 접근 방식에는 아무런 문제가 없습니다.

왜 JLayeredPane을 사용하는지 잘 모르겠습니다. OverlayLayout 및 여러 구성 요소가있는 일반 JPanel을 사용할 수 있어야합니다.

또는 JLayeredPane을 사용하려면 아마도 OverlayLayout이 필요하지 않습니다. ComponentListener를 계층화 구획에 추가해, 사이즈 변경 이벤트가 생성되었을 때에 모든 컴퍼넌트의 사이즈를 변경할 수 있습니다.