前言
在前面我们已经学习过JFrame、JButton这些只是,为什么这些类前面都要加上一个J呢,为什么不能简单的命名为Button呢?
其实,在ATW里面就已经有Button这个类了,我们一直在使用的是Swing,所以要与AWT有所区别。
AWT是抽象窗口工具箱,只适合开发简单的图形用户界面,不适合开发复杂的GUI项目,而且AWT容易发生与平台相关的故障,所以需要一种更加独立的组件,所以Swing就出现了。
Swing更少的依赖平台,不依赖于自己的GUI,是一个轻量级组件,AWT是重量级组件。
为了区分新的组件Swing与AWT,故在组件名称前面都加上一个J。
AWT注定是要退出历史舞台的,MFC就更别提了。
创建GUI的新风格
代码如下:
package Test;
import javax.swing.*;
import java.awt.*;
public class TestFrame extends JFrame{
public TestFrame() {
setLayout(new FlowLayout(FlowLayout.LEFT,10,20));
add(new JLabel("First Name"));
add(new JTextField(8));
add(new JLabel("MI"));
add(new JTextField(1));
add(new JLabel("Last Name"));
add(new JTextField(8));
}
public static void main(String[] args) {
TestFrame frame=new TestFrame();
frame.setTitle("SHowFlowLayout");
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
效果
可以看出这里创建窗口的方式与之前不一样,这里的类是继承自JFrame类,我们构建了一个构造方法,然后再主方法里面对构造方法进行实例化。
这样写的好处比较多,因为创建GUI程序的时候,集成JFrame是很自然的事情,可以进一步扩展新的组件或者功能,最方便的一点是这个类可以重复使用。
FlowLayout
使用Layout的方式布局,当一行放不下的时候,就会自动换行。
有趣的是,当我们拉长框架,组件也会跟着变化,如果把框架拉大,那么组件会继续排成一行,效果如下:
解释一下上述代码的作用
FlowLayout(FlowLayout.LEFT,10,20)
这里表示所有元素左对齐,每个元素之间行距是10,列距是20。
FlowLayout(FlowLayout.RIGHT,0,0)
这个就表示所有元素右对齐,每个元素之间紧贴,行距和间距都为零。
上述代码其实等价于
FlowLayout layout=new FlowLayout(FlowLayout.LEFT,10,20);
setLayout(layout);