0

我正在尝试创建一个工具栏,它将位于我的 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);
    }
4

1 回答 1

5

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

为什么不只使用JToolBar?请参阅如何使用工具栏

我正在创建一个 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约束将被GridLayoutor完全忽略GridBagLayout

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

你应该看看整个在容器中布局组件的课程,以了解布局管理器以及它们是如何工作的。

此外

正如@nIcEcOw 明智地指出的那样,从 Java 1.4 开始BorderLayout,强烈鼓励使用新常量:

PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER

来自如何使用 BorderLayout教程(我的粗体文本):

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

更新

好了,现在您的问题已被编辑为说您实际使用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);

您可能还想看看这个主题:在 Swing GUI 中提供空白

于 2014-10-28T15:53:20.563 回答