布局摆动java

时间:2017-08-22 10:12:33

标签: java swing awt layout-manager

我想创建一个像这样的布局

i want like this

这是我的代码(不起作用):

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等?

我应该更改布局吗?

2 个答案:

答案 0 :(得分:1)

如果你想做类似的事情,使用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);

这应该看起来有点不错,但是如果你仍想改变它的外观,那么你应该为这些面板添加一些组件。布局管理器将自动调整面板的大小,以便一切都适合。

答案 1 :(得分:0)

使用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构造函数设置所有字段。但是,这里不太可读。

这也是一个非常容易出错的布局。