2017-05-04 10 views
2

나는 분명히BoxLayout을 사용하여 구성 요소를 전체 행에 늘릴 수있는 방법은 무엇입니까?

성분이 최대 너비가없는 경우는 어떻게 것을 말한다 How To Use BoxLayout 문서 찾고 있어요? 이 경우 모든 구성 요소의 X 축 정렬이 동일하면 모든 구성 요소의 크기가 입니다.

인스턴스를 JPanel에 많이 추가한다고 가정 해 보겠습니다. 버튼의 최대 너비가 이 아니고이고 모두이 버튼에 대해 setAlignmentX(Component.LEFT_ALIGNMENT)을 호출하면 각 버튼이 전체 행에 걸쳐 늘어납니다. 설명서는 아래 그림을 사용하여이를 보여줍니다.

enter image description here

나는이 작업을 얻을 수 없습니다!

setMaximumSize(null) 및 setMaximumSize(new Dimension(-1,-1))setMaximumSize(new Dimension(0,0)) 버튼을 사용해 보았지만 아무런 설명이 없습니다.

성분이 최대 너비가없는 경우는 어떻게

: 그것은 말할 때

는 excactly 문서는 무엇을 의미 하는가

최대 너비는 무엇입니까?


제가 제작할 수 있었던 최고는 아래에 있습니다. 문서를 읽으면 버튼이 전체 행에 걸쳐 늘어날 수 있어야합니다. 나는 이것을 위해 다른 레이아웃 관리자를 사용할 수도 있다는 것을 알고 있지만, 이것을 BoxLayout (문서가 옳다는 것을 인정/문서를 올바르게 이해했다)으로 이것을하고 싶습니다.

public class CustomList extends JPanel { 

    private final Box box = Box.createVerticalBox(); 

    public CustomList() { 
     for (int i = 0; i < 10; i++) { 
      JButton b = new JButton("Button item" + i); 
      //b.setMaximumSize(new Dimension(0,0)); 
      b.setAlignmentX(Component.LEFT_ALIGNMENT); 
      box.add(b); 
     } 
     setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 
     add(box, BorderLayout.CENTER); 
    } 

    public static void main(String[] args) { 
     CustomList l = new CustomList(); 
     l.setSize(200, 200); 
     l.setBackground(Color.red); 

     JFrame frame = new JFrame("Vertical Box"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(l, BorderLayout.CENTER); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 

} 
+0

JButton을 JPanel로 바꾸면 (최대 크기 설정 여부에 관계없이) 각 JPanel이 전체 ​​행에 걸쳐 늘어납니다. – sbrattla

답변

2

귀하의 버튼

enter image description here

실제로 최대 폭을 가지고있다.

JPanel 개체를 루프에 넣고 BorderLayout 개체를 만들어 각 단추를 각 패널에 추가하십시오 (어쨌든 기본값은 BorderLayout.CENTER).

BorderLayout.CENTER

는 자식 Component의 최대 크기에 대해 상관하지 않는다, 그래서 당신은 그 모든을 내용으로 JButton에 의해 채워지는 JPanel와 끝까지.

JPanel 자체가 new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)의 거대한 기본 최대 크기를 가지고 있기 때문에 (이 폭을 = 32767, 높이 = 32767!) Component의 기본 최대 크기 인 당신은 예상 된 결과를 얻을 것이다 :

public CustomList() { 
    for (int i = 0; i < 10; i++) { 

     JPanel panel = new JPanel(new BorderLayout()); 
     JButton b = new JButton("Button item" + i); 
     //b.setMaximumSize(new Dimension(0,0)); 
     b.setAlignmentX(Component.LEFT_ALIGNMENT); 
     panel.add(b); 
     box.add(panel); 
    } 
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 
    add(box, BorderLayout.CENTER); 
} 
+1

감사합니다. 이것은 JButton을 JPanel로 대체 할 때 보았던 것과 매우 잘 맞 춥니 다. 패널이 전체 행에 걸쳐 펼쳐집니다. 감사! – sbrattla

+0

참고 사항 : 버튼의 최대 너비가 있음을 알 수 있습니다. 좋습니다. 하지만 구성 요소의 최대 너비는 어떻게 될 수 있습니까? 아무도 문서의 의미가 무엇입니까? – sbrattla

+1

글쎄, "none"은 오도 된 것 같아요. "계산 안된다"는 의미 여야합니다.하지만 JPanel조차도 실제로는 최대 크기를 가지고 있지만, 거대하고 최대 크기가없는 것으로 간주 될 수 있습니다. 'Component'의 소스 코드에서 기본 최대 크기는'new Dimension (Short.MAX_VALUE, Short.MAX_VALUE)'입니다. width = 32767, height = 32767입니다. – Berger