2009-09-15 8 views
2

프레임, 패널 A 및 패널 B에 두 개의 AWT 구성 요소가 있습니다. 패널 A의 높이를 프레임의 너비만큼 조정하고 프레임 크기를 유지하려면 패널 B는 A와 겹칠 수 있습니다. B는 고정 된 높이와 너비로 고정 된 위치 (0,0으로 쉽게 됨)에 있습니다. 나는이 작업을하기 위해 어떤 종류의 레이아웃 매니저가 필요한지 잘 모르겠습니다. 널 레이아웃을 사용하면 패널 A의 크기 조정을 직접 관리해야하지만 패널 B의 크기 조정은 상대적으로 쉽습니다. 이 작업을 수행하는 방법에 대한 의견이 있으십니까?스윙 겹치는 구성 요소

덕분에, 제프

+0

패널 A의 너비는 프레임의 너비와 일치해야합니다. – CarlG

+0

네, 기본적으로 A가 높이와 너비 모두 전체 프레임을 채우기를 원합니다. –

답변

10

JLayeredPanes을 살펴보십시오. Here is a tutorial.

은 편집 :

패널 a는 AWT 구성 요소 인 경우에는 하드 panelB이 중복 얻을 누르면됩니다.

경량 (스윙)을 혼합하지 마십시오과 경량의 구성 요소가 헤비급을 겹쳐 것으로 예상되는 컨테이너 내의 헤비급 (AWT) 구성 요소 : Sun의 Mixing Heavy and Light Components을받을 수 기사에서.

그러나 panelA에 프레임을 완전히 채우려는 경우 panelA를 panelA의 구성 요소로 추가하지 않으시겠습니까?

Edit2가 : 당신이 panelB에게 헤비급 구성 요소를 만들 수 있다면

, 당신은 JLayeredPane를 사용할 수 있습니다.

public static void main(String[] args){ 
    new GUITest(); 
} 

public GUITest() { 
    frame = new JFrame("test"); 
    frame.setSize(300,300); 
    addStuffToFrame(); 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run() { 
      frame.setVisible(true); 
     } 
    }); 

}  

private void addStuffToFrame() {  
    Panel awtPanel = new Panel(); 
    awtPanel.setBackground(Color.blue); 
    //here you can fool around with the pane: 
    //first, you can see how the layered pane works by switching the 
    //DEFUALT_LAYER and PALLETTE_LAYER back and forth between the two panels 
    //and re-compiling to see the results 
    awtPanel.setSize(200,300); 
    frame.getLayeredPane().add(awtPanel, JLayeredPane.DEFAULT_LAYER); 
    //next you comment out the above two lines and 
    //uncomment the following line. this will give you the desired effect of 
    //awtPanel filling in the entire frame, even on a resize. 
    //frame.add(awtPanel); 

    Panel awtPanel2 = new Panel(); 
    awtPanel2.setBackground(Color.red); 
    awtPanel2.setSize(300,200); 
    frame.getLayeredPane().add(awtPanel2,JLayeredPane.PALETTE_LAYER); 
} 
+0

JPanel A는 실제로 AWT 구성 요소라고 언급 했어야합니다. 저의 실수입니다. 나는 그 포스트를 편집 할 것이다. –

+0

B AWT도 만들 수 있습니다. 문제는 없습니다. 문제는 PanelA (콘트롤이없는)가 컨테이너가 아니기 때문에 add 메서드가 없다는 것입니다. 나는 부모 컨테이너에 그것들을 추가하고 싶습니다. 그러나 이것은 컨테이너를 어떻게 채울 것인지 잘 모르겠습니다. 그래서 A는 전체 컨테이너를 채우지 만, B는 컨테이너의 일부를 채 웁니다. –

+0

제프, 대답을 업데이트했습니다. 이것을 봐주세요. – akf

0

은 어쩌면 내가 모르는 뭔가가있어. B가 고정 크기이고 (0,0)에 있고 A가 전체 폭을 실행하면 B가 겹치는 것을 사용하는 것이 무엇입니까? 당신은 B.

나는 기본 레이아웃 매니저의 생각할 수 없다 아래에 배치되어 아무 것도 볼 수 없을 것이다, 그러나 Orielly은 당신이 사용할 수있는이 하나 있습니다 relative layout managerdocumentation로 (소스 코드 링크 참조). 오래 동안 사용하지는 않았지만 직접 레이아웃을 관리해야합니다.

+0

결국 나는 다른 위치로 이동할 수 있도록 B를 고정시키지 않을 것입니다. 첫 번째 패스에서는 0,0으로 유지합니다. 당신은 정확하다, 나는 B가 커버하는 그 조각을 보지 않을 것이다. 그러나 그것은 ok 다. 스크린 부동산은 프리미엄이고 B는 작기 때문에 BorderLayout과 같은 것을 사용하고 화면의 큰 부분을 낭비하지 않고 A의 작은 부분을 덮어 쓰고 싶습니다. –

1

가장 좋은 방법은 자신의 LayoutManager을하는 것입니다 : 여기

는 방법을 보여줍니다 빠른 모형이다. 가장 쉬운 방법은 아마도 BorderLayout을 확장하거나 프록시 보드 B를 배치하는 것입니다.

관련 문제