2012-04-02 4 views
3

내 응용 프로그램에서 JSplitPane을 포함하는 프레임이 있습니다. JSplitPane은 가로로 분리되도록 설정됩니다. 왼쪽에는 중요하지 않은 구성 요소가 포함 된 패널이 있습니다. 오른쪽에 JScrollPane, JTextPane, JScrollPaneJButton 안에 JTextArea 하위 클래스가 포함 된 JPanel (BoxLayout)이 있습니다.JTextArea에서 JSplitPane 사용

내 문제는 내가 JSplitPane의 상호 작용 에 따라 크기를 조정하는 (주로 오른쪽) 구성 요소를 얻는 방법이다. JSplitPane을 왼쪽으로 드래그하면 내 JTextArea와 JTextPane이 넓어집니다.

다른 설정을 시도했으며 preferredSize 및 MaximumSize도 설정했지만 아무 것도 작동하지 않는 것 같습니다. 구성 요소는 원하는 크기로 유지됩니다. 크기를 작게하려고하면 scrollPane이 작동하지만 (괜찮습니다) 크기를 늘리려고하면 기본 크기로 유지됩니다.

+0

자바 스윙, 나는 그 것을 사용할 때 악몽을 꾼다. [shudders ...] o_O – ApprenticeHacker

+0

음, 거의 다 했으니 다른 옵션을 찾는 건 정말 좋은 생각이 아니네 ^^ – Giannis

+0

+1 당신의 결단력과 확신. 자바 스윙에서 사용할 수있는 무언가를 만들고 _living에게 이야기하면 _ 내 의견으로는 노벨상을받을 가치가 있습니다. – ApprenticeHacker

답변

2

대부분의 경우 문제는 오른쪽 패널에 사용 된 BoxLayout 때문입니다. 클래스 javadoc의 복사 - 붙여 넣기 :

BoxLayout는 원하는 가로 폭 (가로 레이아웃의 경우) 또는 높이 (세로 레이아웃의 경우)로 구성 요소를 정렬하려고 시도합니다. 수평 레이아웃의 경우, 모든 컴퍼넌트가 같은 높이가 아닌 경우, BoxLayout는 모든 컴퍼넌트가 가장 높은 컴퍼넌트와 같은 높이가되도록 (듯이) 시도합니다. 특정의 컴퍼넌트에서는 불가능한 경우, BoxLayout는 컴퍼넌트의 Y 배치에 따라, 컴퍼넌트를 수직 방향으로 배치합니다. 기본적으로 구성 요소의 Y 정렬은 0.5입니다. 즉, 구성 요소의 수직 중심은 0.5 Y 정렬을 갖는 다른 구성 요소의 수직 중심과 동일한 Y 좌표를 가져야합니다.

마찬가지로 세로 레이아웃의 경우 BoxLayout은 열의 모든 구성 요소를 가장 넓은 구성 요소로 만들기 위해 시도합니다. 실패하면 X 축 정렬에 따라 수평 정렬됩니다. PAGE_AXIS 레이아웃에서는, 컴퍼넌트의 리딩 엣지에 근거 해 수평 방향의 배치가 행해집니다. 즉, 컨테이너의 ComponentOrientation가 좌우되는 경우가 0.0 X 배향 값은 요소의 왼쪽 가장자리를 의미하며 컴퍼넌트 그렇지

사용 내부 구성 요소를 확장 다른 레이아웃의 오른쪽 가장자리를 말한다. 예를 들어 CENTER 영역이 BorderLayout 인 경우 이러한 동작이 발생합니다.

+0

시도해 보았다. 똑같은 행동. – Giannis

+0

JScrollPane이 문제가 될 수 있습니까? textArea/textPane이 JScrollPane 없이는 갈 수는 없지만 .. – Giannis

+0

빈 패널 하나가 어떻게 든 문제를 일으켰습니다. 레이아웃이 도움이 될 수도 있지만. 감사 ! – Giannis

0

저는 개인적으로 지능적으로 확장해야하는 모든 것에 대해 GridBagLayout을 사용합니다. GridBagLayout은 처음에 협박하는 것처럼 보일 수 있지만, 일단 마음이 편치 않게되면 그렇게 나쁘지 않습니다. MiGLayout을 시도해 볼 수도 있는데, 배우기 쉽지만 경우에 따라 GridBagLayout처럼 자세한 정보를 표시 할 수 있습니다.

GridBagLayout 또는 MiGLayout의 모든 뉘앙스를 배우고 싶지 않은 경우 Eclipse 용 WindowBuilder 플러그인을 설치하고 WindowBuilder의 Swing Designer 마법사와 WYSIWYG 편집기를 사용하여 레이아웃을 설정할 수 있습니다.

+0

나는 일할 것이있다. 문제의 원인은 JPanel이 다른 JPanel에 크기를 조정하려고 시도했기 때문입니다. 일단 외부 패널이 제거되면 작동합니다. GridBagLayout을 사용하여 몇 가지 테스트를 수행하기 만하면됩니다. 건배. – Giannis

0

JTextArea에 0이 아닌 최소 크기를 설정하면 BoxLayout을 사용하여 JTextArea를 사용할 때 JSplitPane의 크기를 조정할 수 없다는 문제가 해결되었습니다.

jTextPane.setMinimumSize(new Dimension(50, 50)); 
관련 문제