我应该使用哪种布局管理器来实现以下目的?

时间:2015-03-27 09:24:12

标签: java swing layout-manager miglayout border-layout

我有一个JFrame和三个JPanel。在框架中我使用了BorderLayout。在我CENTER的框架的outerPanel处。在我的outerPanel上,我使用了MigLayout。另外两个面板添加到outerPanel。这两个面板大小相等,宽度加起来outerPanel的宽度 - 我希望 outerPanel 分为两半。以下是此代码:

public class ControlPanel extends JFrame {

// components

public JPanel outerPanel;
public JPanel innerPanel1;
public JPanel innerPanel2;

public ControlPanel() {
    this.createUI();
}

public void createUI() {
    // form properties
    this.setSize(new java.awt.Dimension(300, 300));
    this.setVisible(true);
    this.setLayout(new java.awt.BorderLayout());

    this.outerPanel = new JPanel();
    this.outerPanel.setPreferredSize(new java.awt.Dimension(260, 250));
    this.outerPanel.setLayout(new net.miginfocom.swing.MigLayout());
    this.outerPanel.setBorder(BorderFactory.createEtchedBorder());

    this.add(new javax.swing.JLabel("North"), BorderLayout.NORTH);
    this.add(this.outerPanel, BorderLayout.CENTER);

    this.innerPanel1 = new JPanel();
    this.innerPanel1.setPreferredSize(new java.awt.Dimension(130, 150));
    this.innerPanel1.setLayout(new net.miginfocom.swing.MigLayout());
    this.innerPanel1.setBorder(BorderFactory.createTitledBorder("Panel1"));

    this.innerPanel2 = new JPanel();
    this.innerPanel2.setPreferredSize(new java.awt.Dimension(130, 150));
    this.innerPanel2.setLayout(new net.miginfocom.swing.MigLayout());
    this.innerPanel2.setBorder(BorderFactory.createTitledBorder("Panel2"));

    this.outerPanel.add(this.innerPanel1);
    this.outerPanel.add(this.innerPanel2);
    this.pack();

    }

public static void main(String[] args) {

    ControlPanel cp = new ControlPanel();
  }
}

问题:当我运行程序时,在我调整窗口大小之前出现的GUI很好;但当我调整窗口大小 - 扩展窗口时,innerPane1innerPanel2 保持相同的大小而不调整大小以占用可用空间

问题:我们如何使两个面板innerPannel1innerPanel2同时调整窗口大小,以便它们可以共享可用空间?任何特定的布局管理器可用于将面板分成两个相等的一半,可以与窗口同时调整大小?

图片显示输出。

  1. 在调整大小之前 - GUI看起来很好,面板的大小正确。
  2. enter image description here

    1. 调整大小后 - GUI失真,面板不会改变大小。
    2. enter image description here

1 个答案:

答案 0 :(得分:4)

我建议你使用new GridLayout(1, 2)。这会将面板拆分为1行和2列(大小相同)。

所以,只需更改

this.outerPanel = new JPanel();

this.outerPanel = new JPanel(new GridLayout(1, 2));

应该这样做。