2012-01-17 2 views
1

오늘은 약간의 문제가 있습니다. 아마도 여기 전문가들에게는 아무런 도움이되지 않습니다 :)Java - 어떤 스윙 레이아웃을 사용해야합니까?

내 스윙 구성 요소를 수평선 하나에 갖고 싶습니다. FlowLayout을 사용하고 프레임 크기에 따라 componentResized()에서 구성 요소의 크기를 변경했지만 종종 다음도에 배치 된 마지막 구성 요소가 도청되는 경우가 많습니다 ... BoxLayout을 사용하기로 결정했지만 코드에서

down=new JPanel(new BoxLayout(down,BoxLayout.X_AXIS)); 
    down.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); 
    down.add(Box.createHorizontalGlue()); 
    down.setPreferredSize(new Dimension(300,35)); 

가와 충돌 :

Exception in thread "AWT-EventQueue-0" java.awt.AWTError: BoxLayout can't be shared 
at javax.swing.BoxLayout.checkContainer(Unknown Source) 
at javax.swing.BoxLayout.invalidateLayout(Unknown Source) 
at javax.swing.BoxLayout.addLayoutComponent(Unknown Source) 
at java.awt.Container.addImpl(Unknown Source) 
at java.awt.Container.add(Unknown Source) 
at ButtonFrame.<init>(chat.java:278) 
at chat$1.run(chat.java:20) 
aso... 

내가 무엇을 잘 모릅니다, 어쩌면 내가 두번째 행을 만들거나 상자 레이아웃 작업을 할 FlowLayout의가없는 만들 수 있습니까?

답장을 보내 주셔서 감사합니다.

+0

가능한 복제본 : http://stackoverflow.com/questions/761341/boxlayout-cant-be-shared-error – Yossale

답변

5

패널이 기존의 패널을 처음으로 어떤 레이아웃없이 생성하고 레이아웃을 설정하고 생성하는 방법을 참조 Swing tutorial about BoxLayouts

JPanel listPane = new JPanel(); 
listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS)); 

에서 복사 - 붙여 넣기. 이것은 귀하와 다를 수 있습니다

down=new JPanel(new BoxLayout(down,BoxLayout.X_AXIS)); 

이 줄을 조정하면 (예제와 같이 별도의 두 문장으로 작성) 예외가 제거됩니다.

오, 그래하는 BoxLayout 내가 자주 GridBagLayout에 내가 무엇을해야하기에 충분한 유연성과 제어 기능을 가지고 있음을 발견

+0

예, 문제는 자신이 JPanel의 레이아웃을 만들려고한다는 것입니다. 그 시점에서 JPanel은 제대로 초기화되지 않았으므로 안전하게 사용할 수 없습니다. – Alex

+0

예, 근무 :) 감사합니다 –

1

귀하의 요구 사항을 충족 할 수 있도록해야한다.

2

Java가 제공하는 무엇이든을 날려 버리는 http://www.miglayout.com/을보십시오. 복잡한 일을해야하는 즉시 인생이 더욱 쉬워 질 것입니다.

2

FlowLayout 또는 BoxLayout은 레이아웃 관리자입니다. 레이아웃 관리자의 목표는 구성 요소의 위치와 크기를 자동으로 계산하는 것이므로 구성 요소의 크기를 직접 수정해서는 안됩니다. 여기에서 componentResized()를 사용하면 구성 요소의 크기가 조정되었음을 알 수 있습니다. 레이아웃 관리자가 자동으로 크기를 조정했을 수 있습니다. 여기에서 구성 요소의 크기를 수정하면 다른 자동 레이아웃 절차 등이 실행될 수 있습니다.

구성 요소의 크기를 지정하는 가장 좋은 방법은 해당 구성 요소를 컨테이너에 추가하기 전에 preferred size을 설정하는 것입니다.

관련 문제