我如何将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%[重复]的主要内容,如果未能解决你的问题,请参考以下文章