BoxLayout Y 축이있는 JPanel이 있고이 패널에 여러 개의 JLabel을 추가하려고합니다. 레이블은 패널 너비에 맞아야하지만 필요한 높이만 사용하십시오. 둘 중 하나가 나를 도울 수 있습니까?BoxLayout을 사용하여 부모의 너비에 맞게 구성 요소를 만드는 방법은 무엇입니까?
0
A
답변
3
BoxLayout을 사용하여 부모 폭에 맞게 구성 요소를 만드는 방법은 무엇입니까?
BoxLayout은 구성 요소의 크기 인 maximum size
을 기준으로합니다. JLabel
의 경우 선호 및 최대 크기가 동일하므로 레이블의 크기가 커지지 않습니다.
return new Dimension(getPreferredSize().width, Integer.MAX_VALUE);
그러나 쉬운 방법은 당신이 필요로하는 효과를 필자하는 패널을 nsting하는 것입니다
그래서 당신은 그런 짓을 각의 JLabel의하여 getMaximumSize()
메소드를 오버라이드 (override) 할 수있다. 예를 들어
:
JPanel labelPanel = new JPanel(new GridLayout(0, 1));
labelPanel.add(new JLabel("one"));
labelPanel.add(new JLabel("two"));
JPanel wrapper = new JPanel(new BorderLayout());
wrapper.add(labelPanel, BorderLayout.PAGE_START);
frame.add(wrapper, BorderLayout.CENTER);
이제 labelPanel은 필요하지만 폭이 프레임과 폭이 또한 증가 할 것이다, 따라서 라벨의 폭을 채우기 위해 성장에만 높이를 취할 것입니다.
중첩 패널을 사용하지 않고 다른 옵션은 GridBagLayout
을 사용하는 것입니다. 사용 가능한 공간을 채우기 위해 각 구성 요소의 크기를 조정할 수있는 fill
제약 조건을 지원합니다.
자세한 내용은 Layout Managers의 스윙 튜토리얼 섹션을 참조하십시오.
+0
대단히 고마워요! 이 하나가 도와 줬어. 전에는 컴포넌트의 minimumSize 및 maximumSize를 사용하지 않아도됩니다. –
기본적으로 'BoxLayout'은 구성 요소의'preferredSize'를 존중합니다. 예를 들어'GridLayout'과 같은 다른 레이아웃을 사용하거나'FlowLayout' 내부의'BoxLayout'의 각 줄을 감싸 야합니다. 그러나 좀 더 나은 도움을 받으려면 [mcve]와 실제 크기의 이미지 또는 아스키 아트를 최소한의 크기로 만들고 여분의 공간으로 크기를 조정할 수 있도록 게시하십시오. – Frakcool
답변 해 주셔서 감사합니다. 이것은 GridLayout을 사용할 때처럼 보입니다 : http://prntscr.com/e74ftl, 왜냐하면 사용자가 그것을 사용할 때 얼마나 많은 레이블이 있을지 모르기 때문입니다. 그리고 이것이 BoxLayout : http://prntscr.com/e74gr0에서 보는 방법입니다.하지만 라벨을 패널에 넣고 문자열을 표시하는 데 필요한만큼 커지지는 않습니다. –
@Frakcool,'기본적으로 BoxLayout은 컴포넌트의 preferredSize를 존중합니다. - 실제로이 경우 BoxLayout은 컴포넌트의 최대 크기를 고려합니다. 일반적으로 BoxLayout은 여분의 공간이있을 때 구성 요소가 커질 수있게합니다. 그러나 JLabel의 기본 크기와 최대 크기는 동일하므로 사용 가능한 공간을 채우기 위해 레이블이 커지지 않습니다. – camickr