我如何将JPanel分成70%30%[重复]

Posted

技术标签:

【中文标题】我如何将JPanel分成70%30%[重复]【英文标题】:how do i divide JPanel in 70% 30% [duplicate] 【发布时间】:2012-08-29 20:56:38 【问题描述】:

可能重复:Swing: How do I set a component height to the container's height?

我如何划分JPanel,如下图所示有2个面板panel1和panel2 面板 1 应占 70%,面板 2 应占 30%,或者面板 1 应大于面板 2... 我已经尝试过 Gridlayout、Border Layout 但它不起作用。任何帮助将不胜感激。

public class TestApplication extends JApplet 

private static final long serialVersionUID = 1L;

    JPanel p1,p2;

    public void init()         
        setLayout(new GridLayout(3,1));
        p1=new JPanel();
        p2=new JPanel();

        p1.setBackground(Color.RED);
        p2.setBackground(Color.GREEN);

        add(p1);
        add(p2);
       

【问题讨论】:

上传的图片是在paint中创建的:) 使用GridBagLayout,分别使用weighty=0.7和0.3 【参考方案1】:

您是否考虑过使用JSplitPane (How to Use Split Panes)?

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

public class TestApplication extends JApplet 

private static final long serialVersionUID = 1L;

    JPanel p1,p2;

    @Override
    public void init()         
        setLayout(new BorderLayout());

        p1=new JPanel();
        p2=new JPanel();

        p1.setBackground(Color.RED);
        p2.setBackground(Color.GREEN);
        JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        sp.setResizeWeight(0.7);
        sp.setEnabled(false);
        sp.setDividerSize(0);

        sp.add(p1);
        sp.add(p2);
        add(sp, BorderLayout.CENTER);
       

【讨论】:

【参考方案2】:

如果您有一个外部 JFrame(或另一个 JPanel)f,您可以应用一个 BorderLayout 并将 p1 放在 NORTH 中,将 p2 放在 SOUTH 中。然后,使用

Dimension df = f.getSize();

您将获得外部容器的维度 (f)。 接下来,调用:

void setSize(Dimension d)

这样:

p1.setSize(new Dimension(df.getWidth(), df.getHeight()*0.7));
p2.setSize(new Dimension(df.getWidth(), df.getHeight()*0.3));

最后,将这些 JPanel 添加到其容器中。

【讨论】:

如果你使用 LayoutManager,你永远不应该调用 setSize。要么使用 LayoutManager 的约束,作为最后的手段,你可以强制使用 pref/min/max 大小,或者使用绝对布局 (null-layout),然后你自己调用 setBounds/setLocation/setSize。将两者混合在同一个容器中只是在寻找麻烦。

以上是关于我如何将JPanel分成70%30%[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JPanel 添加到 JFrame 十次 [重复]

如何关闭扩展JPanel的类[重复]

保存要解析的图像数组[重复]

根据多列将一行分成多行[重复]

如何将元组分成两个独立的列表? [重复]

如何使用javascript编写文本