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

Java 使用GridLayout时,在按钮之间留出小空间,java,swing,user-interface,gridbaglayout,jtoolbar,Java,Swing,User Interface,Gridbaglayout,Jtoolbar,我正在尝试创建一个工具栏,它将位于我的JavaSwing应用程序中所有页面的顶部 我正在创建一个JPanel,其中包含一系列单独的JPanel(容器)。每个JPanel(容器)都有一个北方和南方组件,或者只有一个北方组件,使用GridLayout设置 我的问题是,我希望南北部分之间有一个小的差距,但我不知道如何做到这一点,也无法在互联网上找到任何帮助 下面是其中一个容器的代码的工作示例: public static void CustomersGui(){ final JFra

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

我正在创建一个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);
    }
我正在尝试创建一个工具栏,它将位于我的JavaSwing应用程序中所有页面的顶部

你为什么不直接使用它呢?看

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

根据您的代码,这些语句都不正确:您正在添加按钮(而不是面板),并且您正在使用not:

此外,您正在使用
BorderLayout
约束,这些约束将被
GridLayout
gridbagloayout
完全忽略:

container1.add(buttonDiary, BorderLayout.NORTH);
container1.add(buttonCars, BorderLayout.SOUTH);
您应该查看整个课程,了解布局管理器以及它们是如何工作的

此外 正如@nIcEcOw明智地指出的那样,由于Java 1.4
BorderLayout
非常鼓励使用新常量:

PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER
来自教程(粗体文本):

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

更新 现在,您的问题已被编辑为您实际使用了
GridLayout
,答案很简单,您可以使用class'constructor:或
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);
在将按钮添加到
container1
面板时,不要忘记删除
BorderLayout
约束,因为这些约束将被忽略:

container1.add(buttonDiary);
container1.add(buttonCars);
您可能还想看看这个主题:

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

你为什么不直接使用它呢?看

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

根据您的代码,这些语句都不正确:您正在添加按钮(而不是面板),并且您正在使用not:

此外,您正在使用
BorderLayout
约束,这些约束将被
GridLayout
gridbagloayout
完全忽略:

container1.add(buttonDiary, BorderLayout.NORTH);
container1.add(buttonCars, BorderLayout.SOUTH);
您应该查看整个课程,了解布局管理器以及它们是如何工作的

此外 正如@nIcEcOw明智地指出的那样,由于Java 1.4
BorderLayout
非常鼓励使用新常量:

PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER
来自教程(粗体文本):

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

更新 现在,您的问题已被编辑为您实际使用了
GridLayout
,答案很简单,您可以使用class'constructor:或
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);
在将按钮添加到
container1
面板时,不要忘记删除
BorderLayout
约束,因为这些约束将被忽略:

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

您可能还想看看这个主题:

注意,
GridLayout
有一个构造函数,它还允许您指定“hgap”和“vgap”:组件之间水平和垂直间隙的大小。或者,将
BorderFactory.createEmptyOrder(1,2,3,4)
指定给内部组件是添加空格的一种可能方式(但仅当没有适当的布局选项以实现所需目标时才应使用),请查看。希望这会有所帮助:-)此外,您可以使用任何Swing组件:-)请注意,
GridLayout
有一个构造函数,它还允许您指定“hgap”和“vgap”:组件之间的间隙大小,水平和垂直。或者,将
BorderFactory.createEmptyOrder(1,2,3,4)
指定给内部组件是添加空格的一种可能方式(但仅当没有适当的布局选项以实现所需目标时才应使用),请查看。希望这将有帮助:-)此外,您可以使用任何Swing组件:-)请尝试分别使用
BorderLayout.PAGE\u START
BorderLayout.PAGE\u END
用于
BorderLayout.NORTH
BorderLayout.SOUTH
。Java积极鼓励程序员编写新的名称,而不是JDK 1.4:-)@dic19以来的前一个名称。如果你正确阅读了这个问题,你会看到它说这是其中一个容器的代码示例。该代码是按照MCVE原则编辑的,感谢他们指出@nIcEcOw的坏习惯是很难抛弃的。我刚刚编辑了我的答案