所以我在向主主面板添加两个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);
}
答案 0 :(得分:1)
如果你想使用BorderLayout,那么BorderLayout.CENTER会占用尽可能多的空间,其他方向只需要他们需要的东西。如果你向JPanels添加额外的东西,它们会根据它们所包含的对象的需要变大。
如果你想在主JPanel中均匀划分空间,试试这个:
JPanel mainpanel = new JPanel(new GridLayout(2, 1));
创建一个包含2行1列的GridLayout ......
答案 1 :(得分:1)
试试这段代码。显然,如果您在面板上安装网格布局而没有添加任何组件,则不会占用空间。
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);
}
});
}
}
答案 2 :(得分:0)
GridLayout
忽略包含组件的setSize方法中设置的值。如果要控制每个组件的大小,请考虑使用GridBagLayout。