2011-04-18 2 views
0

나는 내 프로그램에 문제가 있음을 설명하기 위해이 코드 샘플을 작성했다.JSplitPane 내에서이 FlowLayout 포장을 어떻게 만들 수 있습니까?

JSplitPane의 슬라이더 막대를 왼쪽으로, 버튼 가장자리를 넘어서서 JPanel을 압축하고 FlowLayout이 단추를 두 번째 줄로 감쌀 수있을 것으로 기대합니다.

대신 JSplitPane을 사용하면 슬라이더를 화면의 가장 오른쪽의 단추 위로 이동시킬 수 없으며 전체 JFrame의 크기를 조정하여 압축을 강제하면 단추가 (오른쪽에서) JPanel은 슬라이더 바 아래에 있습니다 (분명히 볼 수 없기 때문에).

내가 뭘 잘못하고 있니?

import java.awt.*; 
import java.io.*; 
import java.util.*; 
import javax.swing.*; 
public class Driver implements Runnable { 
    public static void main(String[] args) { 
     (new Driver()).run(); 
    } 
    public void run() { 
     try { 
      go(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
    private void go() throws Exception { 
     JFrame jframe = new JFrame("FlowLayoutTest"); 
     JPanel left = new JPanel(); 
     left.setBackground(Color.RED); 
     left.setLayout(new BorderLayout()); 
     JPanel right = new JPanel(); 
     right.setBackground(Color.BLUE); 
     right.setLayout(new BorderLayout()); 
     JSplitPane topmost = 
      new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right); 
     jframe.setContentPane(topmost); 
     JPanel bottomleft = new JPanel(); 
     bottomleft.setBackground(Color.GREEN); 
     bottomleft.setLayout(new FlowLayout()); 
     left.add(bottomleft, BorderLayout.PAGE_END); 
     for (int i = 0; i < 10; i++) { 
      bottomleft.add(new JButton("" + i)); 
     } 
     jframe.pack(); 
     jframe.setVisible(true); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

답변

5

내가 원하는 것을 할 수있는 FlowLayout 외에 다른 레이아웃 관리자가 있습니까?

Wrap Layout이 작동해야합니다.

1

당신이 팩을하기 전에이

bottomleft.setMinimumSize(new Dimension(0, 0)); 

를 추가하는 경우() 다음은 리플 로우 수 있습니다. 하지만 경계선 레이아웃을 다시 채우지 않으므로 두 줄 대신 나머지 줄을 잘라낼 수 있습니다. 따라서 크기를 조정 한 후에는 테두리 레이아웃을 다시 포장해야합니다. 테두리 레이아웃을 생략하면 원하는대로 리플 로우됩니다.

그렇다면 전염병과 같은 FlowLayout은 피해야합니다. Swing과 함께 제공되는 대부분의 레이아웃은 좋지 않지만 FlowLayout은 최악의 범죄자 중 하나입니다.

+0

문제는 내 프로그램이 BorderLayout의 다른 섹션 내에 실제 물건을 가지고 있지만 제거하면 'bottomleft'의 동작에 영향을 미치지 않으므로 내 모형에서 생략합니다. – Maarx

+0

내가 찾고있는 것을 할 수있는 FlowLayout 외에 다른 레이아웃 관리자가 있습니까? (한 줄에서 시작하여 초 단위로 줄이고 구성 요소를 위로 확장) – Maarx

+0

"크기를 조정 한 후에는 테두리 레이아웃을 다시 포장해야합니다." "크기를 변경 한 후"실행할 코드는 어디에 삽입해야합니까? – Maarx