JAVA入门之Swing中空布局 (绝对布局) 的使用
的有关信息介绍如下:我们在前面的经验中陆陆续续给大家介绍了Swing中的各种布局方式,包括流式布局(FlowLayout),边界布局(BorderLayout),格布局(GridLayout),高级格布局(GridBagLayout),通过这些布局方式的组合应用,基本所有用户界面都可以构建出来,但如果你就是遇到一个你无法构建的奇怪界面该怎么办呢? Swing还给了你一柄超牛的布局利器---空布局(又称绝对布局), 其本质就是---没有布局!!这篇经验就告诉你如何使用空布局来构建一个界面。
步骤一 : 新建工程和类,写一个初步的窗口程序
我们的窗口中什么也不添加,在 “initUI”中我们将使用“空布局”,向窗口容器中添加组件!
步骤二 : 初始化组件,将组件以“空布局”的形式添加到窗口容器中
我们这里构建一个应用的登陆界面,包含两个标签(JLabel),两个输入框(JTextField),两个按钮(JButton);我们将容器的布局方式设置为 "空布局",并将组件以绝对位置的形式(这就是“空布局”也被称为“绝对布局”的原因)放置在容器中!
相关代码为 :
// javax.swing.JPanel 代表一张画布(标准称呼是容器)
// 其代表一个空间,用户放置其他可视性的控件 比如按钮,文本等
JPanel contentPanel = new JPanel();
// 设置这个容器的布局方式是空布局
contentPanel.setLayout(null);
// 初始化所需组件
JLabel nameLabel = new JLabel("用户名 :");
JTextField nameTxt = new JTextField();
JLabel pwLabel = new JLabel("密码 :");
JTextField pwTxt = new JTextField();
JButton forgetPwBtn = new JButton("忘记密码");
JButton loginBtn = new JButton("登陆");
// 将组件全部添加到容器中
contentPanel.add(nameLabel);
contentPanel.add(nameTxt);
contentPanel.add(pwLabel);
contentPanel.add(pwTxt);
contentPanel.add(forgetPwBtn);
contentPanel.add(loginBtn);
// 调用 setBounds(x,y,width,height) 设置组件的特定位置
// 对应四个参数分别为 : 横坐标,纵坐标,组件宽度,组件高度
nameLabel.setBounds(140, 100, 60, 35);
nameTxt.setBounds(210, 100, 250, 35);
pwLabel.setBounds(140, 160, 60, 35);
pwTxt.setBounds(210, 160, 250, 35);
forgetPwBtn.setBounds(140, 220, 100, 35);
loginBtn.setBounds(350, 220, 100, 35);
// 最后将这张画布添加到窗口中显示
getContentPane().add(contentPanel);
我们要重点关注所有组件调用的 setBounds 方法, 这个方法是“空布局”的精髓!通过这个方法,我们把已添加到容器中的组件放置在一个固定的位置上!并且可以设置组件的显示高度和宽度!
步骤三 : 运行查看界面效果
我们可以看到,组件按照我们的设置被放置在界面的特定区域!通过界面,我们可以看到 setBounds(x, y, width, height) 方法四个参数的具体含义!
步骤四 : 总结
"空布局" 又称 "绝对布局", 就是没有布局的含义,界面所有元素都需要我们手动指定具体位置(通过 x,y两个坐标)和大小(通过 width, height两个尺寸)。对于一些特殊的界面,如果无法通过常用的那几种布局方式来实现或者实现难度较大时,我们可以考虑使用这种布局方式!