0 java user-interface swing jtoolbar gridbaglayout
我正在尝试创建一个工具栏,它将位于我的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);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个工具栏,它将位于我的java swing应用程序中所有页面的顶部.
我正在创建一个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
Run Code Online (Sandbox Code Playgroud)
此外,您使用的BorderLayout约束将被完全忽略GridLayout或GridBagLayout:
container1.add(buttonDiary, BorderLayout.NORTH);
container1.add(buttonCars, BorderLayout.SOUTH);
Run Code Online (Sandbox Code Playgroud)
您应该看一下容器课程中的整个Laying Out Components,了解布局管理器以及它们如何工作.
正如@nIcEcOw明智指出的那样,自Java 1.4以来BorderLayout,强烈建议使用新的常量:
PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER
Run Code Online (Sandbox Code Playgroud)
从如何使用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);
Run Code Online (Sandbox Code Playgroud)
BorderLayout向container1面板添加按钮时不要忘记删除约束,因为这些将被忽略:
container1.add(buttonDiary);
container1.add(buttonCars);
Run Code Online (Sandbox Code Playgroud)
您可能还想查看此主题:在Swing GUI中提供空白区域