2013-01-16 1 views
-1

Eclipse Indigo에서 WindowBuilder를 사용하여 다른 레이아웃에서 핸들을 얻습니다. 기본적으로 나는 각 시나리오가 어떻게 작동하는지, 어떤 시나리오가 다른 시나리오에 가장 적합한 지 철저히 이해하려고 노력하고 있습니다. 아래의 코드는 작동하지만 몇 가지 사항을 조정할 수 있지만 원하는 효과를 얻는 방법을 모르겠습니다. 특히부모를 채우는 스윙 버튼 만들기

public class Dashboard extends JFrame { 

private JPanel contentPane; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Dashboard frame = new Dashboard(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Dashboard() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 602, 372); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JPanel drawingPanel = new JPanel(); 
    drawingPanel.setBounds(6, 6, 487, 251); 
    contentPane.add(drawingPanel); 
    drawingPanel.setLayout(null); 

    JScrollPane propertiesScrollPane = new JScrollPane(); 
    propertiesScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); 
    propertiesScrollPane.setBounds(6, 264, 487, 80); 
    contentPane.add(propertiesScrollPane); 

    JPanel selectionPanel = new JPanel(); 
    propertiesScrollPane.setViewportView(selectionPanel); 
    selectionPanel.setLayout(new BoxLayout(selectionPanel, BoxLayout.X_AXIS)); 

    JPanel surfacesPanel = new JPanel(); 
    selectionPanel.add(surfacesPanel); 
    surfacesPanel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); 
    surfacesPanel.setLayout(new BoxLayout(surfacesPanel, BoxLayout.Y_AXIS)); 

    JCheckBox surfaceCheck = new JCheckBox("Visible"); 
    surfaceCheck.setHorizontalAlignment(SwingConstants.CENTER); 
    surfacesPanel.add(surfaceCheck); 

    JButton surfaceButton = new JButton("Surfaces"); 
    surfacesPanel.add(surfaceButton); 

    JPanel spacesPanel = new JPanel(); 
    selectionPanel.add(spacesPanel); 
    spacesPanel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); 
    spacesPanel.setLayout(new BoxLayout(spacesPanel, BoxLayout.Y_AXIS)); 

    JCheckBox spacesCheck = new JCheckBox("Visible"); 
    spacesCheck.setHorizontalAlignment(SwingConstants.CENTER); 
    spacesPanel.add(spacesCheck); 

    JButton spacesButton = new JButton("Spaces"); 
    spacesPanel.add(spacesButton); 

    JScrollPane scrollPane_1 = new JScrollPane(); 
    scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    scrollPane_1.setBounds(504, 6, 92, 251); 
    contentPane.add(scrollPane_1); 

    JLabel logoLabel = new JLabel("Logo Here"); 
    LogoLabel.setHorizontalAlignment(SwingConstants.CENTER); 
    LogoLabel.setBounds(505, 264, 91, 80); 
    contentPane.add(logoLabel); 
} 
} 

:

나는 selectionPanel이 왼쪽 하단에 고정하고 싶은이의 propertiesPanel 오른쪽 상단에 고정은 logoLabel는 오른쪽 아래에 고정하고 drawingPanel은 왼쪽 상단에 고정. 기본 폼의 크기를 조정할 때 스크롤 패널과 레이블은 부모 폼의 가장자리를 기준으로 정확하게 유지되어야하며 drawingPanel은 나머지 모든 공간을 차지하지 않도록 가로 및 세로로 크기를 조정할 수 있어야합니다. 상단 프레임의 크기와 관계가 있습니다. selectionPanel은 x 차원에서 크기 조정할 수 있어야하고 y 특성 창의 속성 창은 크기 조정할 수 있어야하지만 로고는 모든 차원에서 크기 조정할 수 없습니다. 마지막으로, 서페이스와 공간 패널 안의 버튼을 패널 내에서 최대 공간을 차지하도록하고 싶습니다. 즉 시행 착오를하거나 매직 넘버 값을 지정할 필요없이 패널이 50x50 픽셀이고 체크 박스가 10 픽셀이면 버튼의 높이가 40 픽셀이어야합니다.

+1

레이아웃 관리자를 사용하는 대신 null 레이아웃을 사용하는 중 문제가 발생했습니다. 이것은 그들이 빛나는 곳입니다. 마치 Swing 라이브러리의보다 강력한 기능 중 하나를 버리는 것을 선택하는 것과 같습니다. 해결책은 널 레이아웃과 전염병과 같은 절대 위치 지정을 피하는 것입니다. 지금은 창 빌더를 버리고 레이아웃 관리자 자습서를 읽고 어떻게 작동하는지 더 잘 이해할 것을 제안합니다. –

+0

나는 그리드 백 (gridbag)으로 바꿨지 만 똑같은 문제를 겪고 있습니다 ...이 물건을 더 잘 이해하려면 무엇을 봐야합니까? – NickAbbey

+0

제약 조건이 내가 여기서 배우고 싶은 것 같은데 ...? – NickAbbey

답변

2

버튼을 부모 컨테이너의 크기로 늘리는 두 가지 방법을 보여주는 this answer을 참조하십시오.

+0

완벽한! 아름다운! 감사! – NickAbbey

+0

당신을 진심으로 환영합니다. 다행 이군. :) –

관련 문제