2014-07-19 2 views
1

일반적으로 BoxLayout 및 GUI 학습. 프레임에 패널을 배치하고 싶습니다. 나중에 동일한 패널을 추가하고 BoxLaoyout을 테스트 할 것입니다. 하지만이 코드가 200x400 크기의 패널이 아니라 프레임의 왼쪽 중간에 빨간색 점 (좌표가 약 (300,0) 임)을 왜 생성하는지 이해할 수 없습니다.GUI, BoxLayout 패널 추가

public class View extends JFrame { 
    public View(){ 
     this.setPreferredSize(new Dimension(600, 600)); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     this.pack(); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 

     Border border = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.RED, Color.BLACK); 

     JPanel p1 = new JPanel(); 
     p1.setSize(200, 400); 
     p1.setBorder(border); 
     p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS)); 


     panel.add(p1); 

     this.add(panel); 
     this.setVisible(true); 
    } 

} 
+0

참조 작업 할 것 같다 [나는 세트의 사용 (| 최대 | 선호 최소)하지 않도록해야할까요? 스윙의 크기 방법] (http://stackoverflow.com/q/7229226/418556) (예.) –

답변

2

레이아웃 관리자 (BoxLayout)는 관리하는 컨테이너 구성 요소의 기본 크기를 사용하고 있습니다. 기본적으로 빈 JPanel의 기본 크기는 0x0이며 경계선을 추가하면 2x2에 더 가까운 기본 크기가 생성됩니다.

레이아웃 관리자를 사용할 때 레이아웃 관리자가 지정할 때 아무 것도 지정하지 않으므로 setSize을 호출하는 것은 의미가 없습니다. 컨테이너는

모두 BoxLayout의의 조합이 당신을 상대 할 것으로 보인다 것으로 생각된다 업데이트 재 검증이다. p1에서 두 번째 BoxLayout을 제거하면 제대로 작동하는 것 같습니다.

또한, BoxLayout는 ... 구성 요소의 최대 크기

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.WindowConstants; 
import javax.swing.border.BevelBorder; 
import javax.swing.border.Border; 
import javax.swing.border.LineBorder; 

public class View extends JFrame { 

    public View() { 
     this.setPreferredSize(new Dimension(600, 600)); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     this.pack(); 

     JPanel panel = new JPanel(); 
     panel.setBorder(new LineBorder(Color.BLUE)); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 

     Border border = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.RED, Color.BLACK); 

     JPanel p1 = new JPanel() { 
      public Dimension getMaximumSize() { 
       return new Dimension(200, 400); 
      } 
     }; 
     p1.setBorder(border); 
     p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS)); 

     panel.add(p1); 

     this.add(panel); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new View(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

나는 선호 크기로 이미 실험했습니다. setSize 대신 다음 코드 줄을 사용했습니다. p1.setPreferredSize (new Dimension (200, 400)); 그러나 결과는 동일했습니다. – Michael