回 帖 发 新 帖 刷新版面

主题:[讨论]为什么上下两行Button之间有间隙

为什么上下两行Button之间有间隙
 
import java.awt.*;
import javax.swing.*;
public class ButtonLayout extends JFrame
{
    public ButtonLayout()
    {
        Container container=getContentPane();
        container.setLayout(new BorderLayout());
        JPanel p1=new JPanel();
        for(int i=1;i<=3;i++)
            p1.add(new JButton("Button"+i));
        JPanel p2=new JPanel();
        for(int i=4;i<=6;i++)
            p2.add(new JButton("Button"+i));
        container.add(p1,BorderLayout.CENTER);
        container.add(p2,BorderLayout.SOUTH);
    }
    public static void main(String[] args)
    {
        ButtonLayout frame=new ButtonLayout();
        frame.setTitle("ButtonLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setVisible(true);
    }
}

回复列表 (共6个回复)

沙发

button是添加在panel中的,panel的默认布局管理器是 FlowLayout 布局管理器
frame的是BorderLayout

板凳

窗体中默认面板本身就是BorderLayout,因此不用特意设置。
加在BorderLayout中央(CENTER)的组件所占的位置是最大的。你将面板p1加在面板中央,自然p1占有默认面板中很大的位置。中央的空白实际上是面板p1。

如果将代码稍微更改,就会有另一翻效果。

container.add(p1,BorderLayout.NORTH);  //面板p1加在北部
container.add(p2,BorderLayout.CENTER); //面板p2加在中央

这样看起来,两行按钮小了很多,同时p2下面出现了很多空白。

3 楼

与楼上的看法一样~~~顺便想问一下用什么方法可以将这些组件紧凑起来??
不让它有这么多空余的部分。。。。

4 楼

frame.setLayout(null)
然后自己设置组件的位置

5 楼

针对于四楼的问题,有一个最简单的方法,就是不要设置窗体大小,采用JFrame的pack()方法就可以实现。


public static void main(String[] args)
{
        ButtonLayout frame=new ButtonLayout();
        frame.setTitle("ButtonLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack(); //使用pack(),会根据组件自动调整窗体到合适大小。
        frame.setVisible(true);
}

6 楼

SWING可以??
我知道AWT可以  SWING 好象不行  
我记得前几天试过

我来回复

您尚未登录,请登录后再回复。点此登录或注册