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ディメンションでサイズ変更可能である必要があります。最後に、サーフェスとスペースのパネル内のボタンで、パネル内のスペースを最大限に活用したいと思います。つまり、