我正在尝试创建一个工具栏,它将位于我的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);
}
答案 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
约束将被GridLayout
或GridBagLayout
完全忽略:
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