在学习java的GUI界面的时候,第一步就是窗体的实现。用java代码实现窗体有两个包可以使用,分别是java.Awt和javax.Swing
但是前者需要调用本地系统方法实现功能(属重量级控件),而后者是在AWT的基础上建立的一套图形界面系统,其中提供了
更多的组件,而且完全由Java实现(增强了移植性,属轻量级控件)。因此,经常使用的包为javax.Swing。
可以将新建的窗体看做是一个存放组件的容器。
先说下与窗体密切相关的布局管理器吧。
1、组件在窗体中的位置和大小室友布局管理器来决定的,所有的窗体都会使用一个布局管理器,通过它来自动进行组件的布局管理。
2、java共提供了五中布局管理器:
* 流式布局管理器(FlowLayout):按照组建的添加次序将按钮组件(或其他组件)从左到右放置在容器中,当到达容器的边界时,组件将放置在下一行中。
* 边界布局管理器(BorderLayout):将容器简单的划分为东西南北中五个区域,中间区域最大。
* 网络布局管理器(GridLayout):以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件。
* 卡片布局管理器(CardLayout):将容器中的每个组件看做一张卡片。一次只能看到一张卡片。
* 网格布局管理器(GridBagLayout):与网络布局管理器相似,但是它可以将分好的几个矩形块合并(相当于表格中的合并单元格)
现在看一下分别用JFrame和Frame新建窗体的代码(测试OK):
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class One {
static JFrame jframe;
static Button button;
static Frame frame;
public static void jframeInit(){
//新建一个最初不可见的、具有指定标题的JFrame对象
jframe = new JFrame("JFrame Window");
//为窗体设置长度和宽度。括号中第一个是横向长度,第二个是纵向长度
jframe.setSize(500, 400);
//为窗体设置初始位置。括号中第一个是窗体左顶点距离电脑屏幕最左边的距离,
//第二个是窗体左顶点距离电脑屏幕最上边的距离。
jframe.setLocation(300, 200);
/**
* 与上两句所起到的效果一致
* 括号中共有四个属性,前两个与setLocation的一致,后两个与setSize的一致
*/
// jframe.setBounds(300, 200, 500, 400);
jframe.setLayout(new FlowLayout()); //设置窗体的页面布局格式
button = new Button("button"); //创建一个新的按钮,并且按钮上有标签内容
jframe.add(button); //将按钮添加到窗体上(默认居中)
//鼠标点击窗体右上角表示的的“关闭”按钮时执行的关闭动作(若没有这句话,无法正常关闭)
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true); //使窗体可视化
}
public static void frameInit(){
frame = new Frame("Frame Window");
frame.setSize(500,400);
frame.setLocation(300, 200);
// frame.setBounds(300,200,500,400); //与上两句所起到的效果一致
frame.setLayout(new FlowLayout());
button = new Button("button");
frame.add(button);
frame.setVisible(true);
//关闭窗体(第一种方法)
frame.addWindowListener(new MyWin());
//关闭窗体(第二种方法——与第一种相似)
// frame.addWindowListener(new WindowAdapter(){
// public void windowClosing(WindowEvent e){
// System.exit(0);
// }
// });
}
public static void main(String[] args){
// jframeInit();
frameInit();
}
}
class MyWin extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
Frame和JFrame对窗体的设置等有很多地方是相同的,比如设置窗体大小、设置窗体位置等;但是也有不同点,二者关闭窗体的使用方式不同。
JFrame关闭窗体的命令:
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame关闭窗体的命令:
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
而且严格意义上说,JFrame是Frame的扩展版本,添加了对JFC/Swing组件架构的支持。具体也可以查看JFrame和Frame的帮助文档。