Как я делю JPanel в 70% 30%

Возможный дубликат:
Swing: Как установить высоту компонента на высоту контейнера?

как я делю JPanel, как показано на рисунке ниже, есть 2 панели panel1 и panel2 panel1 должен принимать 70%, а panel2 30% или panel1 должен быть больше, чем panel2... Я попробовал 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);
    }   
}

enter image description here

Ответ 1

Считаете ли вы использование JSplitPane (Как сделать Использовать разделенные панели)?

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);
    }   
}

enter image description here

Ответ 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));

Наконец, добавьте эти JPanels в свой контейнер.