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 픽셀이어야합니다.
레이아웃 관리자를 사용하는 대신 null 레이아웃을 사용하는 중 문제가 발생했습니다. 이것은 그들이 빛나는 곳입니다. 마치 Swing 라이브러리의보다 강력한 기능 중 하나를 버리는 것을 선택하는 것과 같습니다. 해결책은 널 레이아웃과 전염병과 같은 절대 위치 지정을 피하는 것입니다. 지금은 창 빌더를 버리고 레이아웃 관리자 자습서를 읽고 어떻게 작동하는지 더 잘 이해할 것을 제안합니다. –
나는 그리드 백 (gridbag)으로 바꿨지 만 똑같은 문제를 겪고 있습니다 ...이 물건을 더 잘 이해하려면 무엇을 봐야합니까? – NickAbbey
제약 조건이 내가 여기서 배우고 싶은 것 같은데 ...? – NickAbbey