所以我有一个小问题添加两个jpanel到一个主要的主面板。我把它作为我想做的一个快速示例,因为您不想浏览大量不必要的代码:)。我想先添加面板一(北),然后面板二(南)。我试过使用边界布局,并在添加面板时将它们定位在BorderLayout上调用北方和南方,但仍然没有运气。
提前感谢。
private JPanel one,two;
public Example(){
one = new JPanel();
one.setSize(new Dimension(400,400));
two = new JPanel(new GridLayout(7,8));
two.setSize(new Dimension(400,400));
one.setBackground(Color.BLACK);
two.setBackground(Color.BLUE);
JPanel mainpanel = new JPanel();
mainpanel.setBackground(Color.orange);
mainpanel.add(one);
mainpanel.add(two);
add(mainpanel);
setSize(500,500);
setVisible(true);
}
如果你想使用BorderLayout,然后使用BorderLayout。中心尽可能多地占用空间,其他方向只占用它们需要的空间。如果你添加额外的东西到jpanel,它们会变得更大,基于它们所包含的对象的需要。
如果你想在主JPanel中均匀地划分空间,试试这个:
JPanel mainpanel = new JPanel(new GridLayout(2, 1));
创建一个2行1列的GridLayout
试试下面的代码。有一个问题,显然,如果你在面板上安装网格布局,你不添加组件,它不会占用空间。
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example extends JFrame
{
private JPanel one, two;
public Example()
{
one = new JPanel();
two = new JPanel();///new GridLayout(7, 8));
one.setBackground(Color.BLACK);
two.setBackground(Color.BLUE);
JPanel mainpanel = new JPanel(new BorderLayout());
mainpanel.setBackground(Color.orange);
mainpanel.add(one, BorderLayout.NORTH);
mainpanel.add(two, BorderLayout.SOUTH);
setContentPane(mainpanel);
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
Example f = new Example();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}
GridLayout
忽略包含组件的setSize方法设置的值。如果你想控制每个组件的大小,可以考虑使用GridBagLayout。