我有一个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很好;但是当我调整窗口大小-放大它时,
innerPane1
和innerPanel2
保持相同大小,而没有调整大小以占据可用空间。问:如何使两个面板
innerPannel1
和innerPanel2
与窗口同时调整大小,以便它们可以平均共享可用空间?是否有任何特定的布局管理器可用于将面板分为两个相等的部分,并且可以与窗口同时调整大小?显示输出的图像。
调整大小之前-GUI看起来不错,面板尺寸正确。
调整大小后-GUI失真,面板不变。
最佳答案
我建议您使用new GridLayout(1, 2)
。这会将面板分成1行和2(相等大小)列。
因此,只需更改
this.outerPanel = new JPanel();
至
this.outerPanel = new JPanel(new GridLayout(1, 2));
应该做。