GUI图形用户接口,相当于c#中的winform。以前一直用winform做,感觉特简单,控件拖进去,点点点就行了,写一些事件就能完成大多数事件。似乎学习c#都是从winform开始,感觉好简单的说,好了废话不多说。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
先说一下Awt和Swing的区别:
Awt与 Swing
java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。(重量级控件就是和系统结合比较紧密的控件,受限于操作系统,不易于移植。)
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。(移植性很好)
接下来说说AWT的继承体系
我们可以通过add方法将控件(window、frame、dialog和panel增加进去)
记得第一次玩布局的时候是做Android的一个小应用,有一些布局是必须知道的,当时就是因为不懂布局,所以界面做的很差劲。常见的布局管理器:
FlowLayout(流式布局管理器)
- 从左到右的顺序排列。
- Panel默认的布局管理器。
BorderLayout(边界布局管理器)
- 东,南,西,北,中
- Frame默认的布局管理器。
GridLayout(网格布局管理器)
- 规则的矩阵
CardLayout(卡片布局管理器)
- 选项卡
GridBagLayout(网格包布局管理器)
- 非规则的矩阵
有了控件就必须写方法,在控件上写入方法
除了activeListener事件,其余事件都可以用WindowAdapter适配器来完成,省去了全部复写方法的麻烦。
例子:
Frame frame=new Frame("zgq");
//frame.setSize(500,400);
//frame.setLocation(300,200);
frame.setBounds(500, 400, 300, 200);
frame.setLayout(new FlowLayout());
Button but=new Button("button");
frame.add(but);
//为button写点击事件
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成的方法存根
System.out.println("点击button");
}
});
//为frame写事件
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0){
System.exit(0);
}
});
//如果不用windowAdapter适配器,需要复写这么多事件 故使用适配器更为方便
// frame.addWindowListener(new WindowListener() {
//
// @Override
// public void windowOpened(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowIconified(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowDeiconified(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowDeactivated(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowClosing(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowClosed(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
//
// @Override
// public void windowActivated(WindowEvent arg0) {
// // TODO 自动生成的方法存根
//
// }
// });
frame.setVisible(true);