2012-02-04 15 views
2

두 개의 JLabel이 포함 된 JPanel이 있습니다. 이 패널은 BorderLayout을 사용합니다. 이 두 레이블을 표시하기에 충분한 수직 공간이되지 않도록 내가 패널의 크기를 조정하면BorderLayout - "중앙"구성 요소가 "잘린"것을 방지합니다.

하나의 JLabel이 BorderLayout.PAGE_END

에, BorderLayout.CENTER 위치로 다른 사람을 넣어의 중심 라벨로 (차단) 항상 겹쳐 PAGE_END 위치의 레이블.

가운데 라벨에 표시되는 정보가 다른 라벨보다 중요하므로 가운데 맞춤 라벨 아래에 라벨을 중첩 (또는 잘림)하고 싶습니다.

BorderLayout (및 GridBagLayout)은 항상 "위에서 아래로"구성 요소를 칠하고 "나중에"그려진 요소는 이전에 그렸던 요소를 덮어 씁니다.

BorderLayout (또는 다른 LayoutManager)에서 특정 구성 요소가 항상 "맨 위에"있다고 가정 할 수있는 방법이 있습니까?

나는
panel.setComponentZOrder(label1, 1); 
panel.setComponentZOrder(label2, 0); 

를 사용하여 시도하지만 그 차이를 만들지 않았다.

답변

2

한 가지 방법은 기본 크기와 관련하여 GridLayout의 사용자 지정 변형을 사용하는 것입니다. PreferredBoundable 구현을 사용하는 PreferredSizeGridLayout이 그 예입니다.

부록 : 다음은 내가 시도한 테스트 코드입니다. 변경하지 않고 하단 레이블이 상단 아래에 "미끄러 져"있지만 속성을 처리해야합니다.

public class PreferredLayoutTest extends JPanel { 

    public PreferredLayoutTest() { 
     this.setLayout(new PreferredSizeGridLayout(0, 1)); 
     this.add(createLabel("One")); 
     this.add(createLabel("Two")); 
    } 

    private JLabel createLabel(String s) { 
     JLabel label = new JLabel(s); 
     label.setOpaque(true); 
     label.setBackground(Color.lightGray); 
     label.setFont(label.getFont().deriveFont(36f)); 
     return label; 
    } 

    private void display() { 
     JFrame f = new JFrame("PreferredLayoutTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new PreferredLayoutTest().display(); 
      } 
     }); 
    } 
} 
+0

링크 덕분에 재미있는 해킹 +1 – mKorbel

+0

링크를 제공해 주셔서 감사합니다. 내 자신의 LayoutManager에 대해서도 생각하고 있었지만 그 길을 가고 싶지 않았습니다. 실제로 PreferredSizeGridLayout이 도움이 될지 확신 할 수 없으므로 * 두 번째 레이블이 기본 크기보다 * 우량하지 않아야합니다. 하지만 어쩌면 나는 "메인"레이블의 선호 크기를 존중하는 것만 큼 함께 사용할 수 있습니다. –

+0

위 테스트 코드를 추가했습니다. 설계의 한 가지 매력적인 측면은'BoundableInterface'에 의해 제공되는 암시적인 전략 패턴입니다. 주식 레이아웃 관리자를 사용하는 솔루션에 대해이 기능을 잠시 동안 열어 둘 수 있습니다. – trashgod

2

가운데 라벨에 텍스트가 충분할 때 최상위 컨테이너에 setMinimumSize(Dimension)으로 전화하십시오.