【问题标题】:how do i divide JPanel in 70% 30% [duplicate]我如何将JPanel分成70%30%[重复]
【发布时间】: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

标签: java swing jpanel layout-manager japplet


【解决方案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。将两者混合在同一个容器中只是在寻找麻烦。
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多