2011-04-28 5 views
3

내 app/JFrame은 Borderlayout을 사용하여 상단 또는 북쪽에 툴바가 있고 하단 또는 남쪽에 상태 표시 줄이 있으며 중앙에는 JPanel.JTabbedPane.JScrollPane.JTable이 있습니다. JPanel은 항상 다양한 구성 요소에 다양한 조합으로 적용된 다양한 Set * Size() 메서드를 사용하여 대략 조정 가능한 고정 크기입니다. 그러나 항상 고정 된 크기이며 항상 동쪽과 서쪽의 틈이 있습니다. 북쪽과 남쪽의 구성 요소는 고정 높이로 유지되고 예상대로 가로로 크기가 조정됩니다.Borderlayout의 .CENTER에있는 구성 요소를 만들어서 모든 가운데 공간을 차지하고 앱으로 크기를 조정하는 방법은 무엇입니까?

확실히 새롭거나 독특한 디자인이 아닙니다.

정상적인 동작입니까? 내가 놓친 트릭이 있습니까?

+0

는 "이 정상적인 행동인가?" 그것은 그것 같이 소리가 나지 않는다. 무슨 일이 일어나고 있는지 볼 수 있도록 [SSCCE] (http://pscode.org/sscce.html)를 준비하고 게시하는 것이 어떻습니까? –

답변

3

이것은 FlowLayout의 기본값을 JPanel으로 유지하고 패널을 BorderLayout의 가운데에 추가하는 특징입니다. 아래 예제는 FlowLayout 인 패널을 기본값 인 GridLayout과 비교합니다. 대조적으로, 두 개는 GridLayout에 추가되며 BorderLayout 센터와 비슷한 방식으로 확장이 가능합니다.

layout comparison image

import java.awt.EventQueue; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTree; 

/** @see http://stackoverflow.com/questions/5822810 */ 
public class LayoutPanel extends JPanel { 

    public LayoutPanel(boolean useGrid) { 
     if (useGrid) { 
      this.setLayout(new GridLayout()); 
     } // else default FlowLayout 
     this.add(new JTree()); 
    } 

    private static void display() { 
     JFrame f = new JFrame("LayoutPanels"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new GridLayout(1, 0)); 
     f.add(new LayoutPanel(false)); 
     f.add(new LayoutPanel(true)); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

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

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

질문에 답을 한 순간에 발견 한 바로는 정확합니다. JPanel을 Borderlayout으로 변경하고 JScrollPane을 CENTER에 추가했습니다. 이제는 모든 것이 훨씬 좋습니다. 감사. – alm