我应该使用哪个布局管理器来实现以下目标?
Which Layout Manager Should I use to achieve the following?
我有一个 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();
}
}
问题:当我运行我的程序时,在我调整window大小之前出现的GUI很好;但是 当我调整 window 的大小时 - 放大它 、innerPane1
和 innerPanel2
保持相同的大小而不调整大小以占据space可用.
问题:我们如何制作两个面板,innerPannel1
和innerPanel2
,同时用window调整大小所以他们可以平等地分享可用的space?可用于将面板分成相等的两半的任何特定布局管理器,可以使用 window?
同时调整大小
图像显示输出。
- 调整大小之前 - GUI 看起来不错,面板大小正确。
- 调整大小后 - GUI 变形,面板大小不变。
我建议你使用new GridLayout(1, 2)
。这会将面板拆分为 1 行和 2(大小相等)列。
所以,简单地改变
this.outerPanel = new JPanel();
到
this.outerPanel = new JPanel(new GridLayout(1, 2));
应该做。
我有一个 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();
}
}
问题:当我运行我的程序时,在我调整window大小之前出现的GUI很好;但是 当我调整 window 的大小时 - 放大它 、innerPane1
和 innerPanel2
保持相同的大小而不调整大小以占据space可用.
问题:我们如何制作两个面板,innerPannel1
和innerPanel2
,同时用window调整大小所以他们可以平等地分享可用的space?可用于将面板分成相等的两半的任何特定布局管理器,可以使用 window?
图像显示输出。
- 调整大小之前 - GUI 看起来不错,面板大小正确。
- 调整大小后 - GUI 变形,面板大小不变。
我建议你使用new GridLayout(1, 2)
。这会将面板拆分为 1 行和 2(大小相等)列。
所以,简单地改变
this.outerPanel = new JPanel();
到
this.outerPanel = new JPanel(new GridLayout(1, 2));
应该做。