簡體   English   中英

布局擺動Java

[英]Layouts swing java

我想創建一個這樣的布局

我想要這樣

這是我的代碼(不起作用):

outer.setLayout(new BorderLayout());

panel1 = new JPanel();
...
outer.add(panel1, BorderLayout.PAGE_START);
outer.add(panel2, BorderLayout.LINE_START); 
outer.add(panel3, BorderLayout.CENTER); 
outer.add(panel4, BorderLayout.LINE_END); 
outer.add(panel5, BorderLayout.PAGE_END);  

注意:上方的panel5內應再包含2個面板

在上面的代碼中,我可以將它們放置在正確的位置,但是中間的位置(panel3)很大,因此所有其他位置都被擠壓到一邊。

我如何在這些尺寸中獲得一些比例,例如2:10:2等?

我應該更改布局嗎?

如果您想做類似的事情,那么使用BorderLayout是一個好的開始。 所以是的,我在這里也會使用BorderLayout。

但是,您應該更改添加面板的方式:

outer.add(panel1, BorderLayout.NORTH);
outer.add(panel2, BorderLayout.WEST);
outer.add(panel3, BorderLayout.CENTER);
outer.add(panel4, BorderLayout.EAST);
//Create a additional Panel for the two at the bottom
JPanel southPanelContainer = new JPanel(new BorderLayout());
southPanelContainer.add(panel5, BorderLayout.EAST);
southPanelContainer.add(panel6, BorderLayout.WEST);
outer.add(southPanelContainer, BorderLayout.SOUTH);

這看起來應該已經不錯了,但是,如果您仍然想更改外觀,則應該向這些面板中添加一些組件。 布局管理器將自動調整面板的大小,以適應所有情況。

GridBagLayout用於表/矩陣之類的布局,其中某些“單元格”占用多個插槽。 BorderLayout用於一個中央面板,周圍有一些邊界面板。

public MainFrame() {
    JPanel outer = new JPanel(new GridBagLayout());
    outer.setPreferredSize(new Dimension(800, 600));

    JPanel panel1 = createPanel("1");
    JPanel panel2 = createPanel("2");
    JPanel panel3 = createPanel("3");
    JPanel panel4 = createPanel("4");
    JPanel panel5 = createPanel("5");

    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.BOTH;
    c.weightx = 1.0;
    c.weighty = 1.0;
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 3; // col span
    c.gridheight = 1;
    outer.add(panel1, c);

    c.weightx = 0.33;
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 1;
    c.gridheight = 1;
    outer.add(panel2, c);

    c.weightx = 0.33;
    c.gridx = 1;
    c.gridy = 1;
    c.gridwidth = 1;
    c.gridheight = 1;
    outer.add(panel2, c);

    c.weightx = 0.33;
    c.gridx = 2;
    c.gridy = 1;
    c.gridwidth = 1;
    c.gridheight = 1;
    outer.add(panel3, c);

    c.weightx = 0.33;
    c.gridx = 3;
    c.gridy = 1;
    c.gridwidth = 3;
    c.gridheight = 1;
    outer.add(panel4, c);

    c.weightx = 1.0;
    c.weighty = 1.0;
    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 3;
    c.gridheight = 1;
    outer.add(panel5, c);

    setContentPane(outer);
    pack();
}

private JPanel createPanel(String title) {
    JPanel panel = new JPanel();
    panel.setBorder(BorderFactory.createTitledBorder(title));
    setPreferredSize(new Dimension(300, 300));
    return panel;
}

有一個GridBagConstraints構造函數設置所有字段。 但是,這里的可讀性不強。

這也是一個容易出錯的布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM