使用GridLayout时,在按钮之间留出小空格

时间:2014-10-28 15:15:59

标签: java swing user-interface gridbaglayout jtoolbar

我正在尝试创建一个工具栏,它将位于我的java swing应用程序中所有页面的顶部。

我正在创建一个JPanel,其中包含一系列单独的JPanel(容器)。每个JPanel(容器)都有一个南北组件或只是一个北组件,使用GridLayout设置。

我的问题是,我希望南北组成部分之间存在一个小差距,但我看不出怎么做,也无法在互联网上找到任何帮助。

以下是其中一个容器的代码的工作示例:

public static void CustomersGui(){

        final JFrame frame = new JFrame("Nested Layout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel container1 = new JPanel();
        container1.setLayout(new GridLayout(2,1));
        JButton buttonDiary = new JButton("Diary");
        buttonDiary.setPreferredSize(new Dimension(140, 25));
        JButton buttonCars = new JButton("Cars");
        buttonCars.setPreferredSize(new Dimension(140, 25));
        container1.add(buttonDiary, BorderLayout.NORTH);
        container1.add(buttonCars, BorderLayout.SOUTH);


        frame.setContentPane(container1);

        frame.pack();


        frame.setVisible(true);
    }

1 个答案:

答案 0 :(得分:5)

  

我正在尝试创建一个工具栏,它将位于我的java swing应用程序中所有页面的顶部。

为什么不使用JToolBar?见How to use Tool Bars

  

我正在创建一个JPanel,其中包含一系列单独的JPanel(容器)。每个JPanel(集装箱)都有北部和南部   组件或只是一个北组件,使用GridBagLayout进行设置。

根据您的代码,这些陈述均不属实:您正在添加按钮(而不是面板),而您正在使用GridLayout而不是GridBagLayout

JPanel container1 = new JPanel();
container1.setLayout(new GridLayout(2,1)); // GridLayout
JButton buttonDiary = new JButton("Diary"); // button here
buttonDiary.setPreferredSize(new Dimension(140, 25));
JButton buttonCars = new JButton("Cars"); // another button here

此外,您使用的BorderLayout约束将被GridLayoutGridBagLayout完全忽略:

container1.add(buttonDiary, BorderLayout.NORTH);
container1.add(buttonCars, BorderLayout.SOUTH);

您应该查看整个Laying Out Components Within a Container课程,了解布局管理器以及它们如何工作。

另外

正如@nIcEcOw明智指出的那样,自Java 1.4 BorderLayout以来,我们极力鼓励使用新的常量:

PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER

来自How to Use BorderLayout教程(粗体文字):

  

在JDK 1.4版之前,各个领域的首选名称是   不同的,从指南针的点(例如,   最高区域的BorderLayout.NORTH到word的版本   我们在示例中使用的常量。 我们的示例使用的常量是   首选,因为它们是标准的,并使程序可以适应   具有不同方向的语言。

更新

现在您的问题已被编辑,说您实际使用GridLayout它很容易回答,您可以通过使用类'来指定组件之间的水平和垂直间隙。构造函数:或setHgap()setVgap()方法:

JPanel container1 = new JPanel(new GridLayout(2, 1, 8, 8));

// Or

GridLayout gridLayout = new GridLayout();
gridLayout.setRows(2);
gridLayout.setColumns(1);
gridLayout.setHgap(8);
gridLayout.setVgap(8);    
JPanel container1 = new JPanel(gridLayout);

在向BorderLayout面板添加按钮时,不要忘记删除container1限制,因为这些会被忽略:

container1.add(buttonDiary);
container1.add(buttonCars);

您可能也想查看此主题:Providing white space in a Swing GUI