我正在尝试创建一个工具栏,它将位于我的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);
}
我正在尝试创建一个工具栏,它将位于我的java swing应用程序中所有页面的顶部
为什么不直接使用JToolBar?请参阅如何使用工具栏
我正在创建一个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);
您应该学习整个"在容器中布置组件"课程,以了解布局管理器以及它们是如何工作的。
此外
正如@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);
当您将按钮添加到container1
面板时,不要忘记删除BorderLayout
约束,因为这些约束将被忽略:
container1.add(buttonDiary);
container1.add(buttonCars);
您可能还想看看这个主题:在Swing GUI 中提供空白