Java GUI-AWT
2015年12月29日
1 目标:提供Java的WriteOnce,RunAnywhere的目标,提供跨平台的GUI。
2 原理:针对不同平台调用OS底层的GUI,封装统一API。
但是对于平台特有的组件无法实现Java的跨平台目标,并且Java使用JNI调用底层GUI的方式也给跨平台带来不便。于是Java在后续的GUI中使用AWT的扩展版本Swing代替AWT。
参考:《疯狂java讲义(第2版)》
注意:由于AWT已经被Swing替代,仅学习其基本功能,作为Swing的基础。
3 流程:创建组件,设置组件属性,显示组件。
//Main.java
package lee;
import java.awt.Frame;
import java.awt.Window;
/**
* @author sf2gis@163.com
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Framef=new Frame();
f.setBounds(30,30,200,200);
f.setVisible(true);
}
}
4 方法:GUI组件
参考:http://www.cnblogs.com/growup/archive/2010/04/24/1971548.html
4.1 组织结构:
Object:基类
-|Component:基本组件
--|Container:容器
--|Button等具体组件
-|MenuComponent:菜单组件
--|MenuBar:菜单栏
--|MentItem:菜单项
---|Menu:菜单
4.2 容器:用于组织其它组件,包括一个布局。
4.2.1分类:框架、对话框等。
4.2.1.1 窗口Window:抽象概念(很少使用),表示一块屏幕区域,无边框,不能调整大小。
根据子组件自动调整大小pack()。
4.2.1.2 框架Frame:Window的子类,具有边框,菜单,能够调整大小等,与Win平台的Window,From很像。默认使用BorderLayout布局。
4.2.1.3 对话框Dialog:Window的子类,与Frame类似,无菜单。
4.2.1.4 面板Panel:用于盛放其它组件,默认使用FlowLayout布局。
4.2.1.5 滚动面板ScrollPane:用于盛放其它组件,默认使用BorderLayout布局(一般不需修改)。
4.2.2属性设置:大小,位置等。
大小:setSize(),
位置:setLocation()。
大小和位置:setBounds()。
可见性(默认不可见):setVisible()。
4.2.3子组件设置:CRUD
增:add()。
删:
改:
查:getComponents(),getComponentAt(),getComponentCount()。
4.2.4 示例
//Main.java
package lee;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.TextField;
/**
* @author sf2gis@163.com
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f=new Frame();
f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 10));
f.setBounds(30,30,200,200);
f.setVisible(true);
f.setTitle("Hello,World!");
Panelp1=new Panel();
p1.add(new Button("Hello"));
f.add(p1);
ScrollPanep2=new ScrollPane();
p2.add(new TextField(200));
f.add(p2);
}
}
4.3 布局管理器:Layout
4.3.1目标:自动调整大小,避免不同平台位置和大小需要手动调整。
4.3.2原理:根据一定的规则自动调整大小和位置。
4.3.3方法:
4.3.3.1 FlowLayout:流动布局,按顺序排列,到达边界后折行。
可以指定对齐方式,间距(水平、垂直)。
//Main.java
/**
* Demo
*/
package lee;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
/**
* @author sf2gis@163.com
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODOAuto-generated method stub
Frame f=new Frame();
f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 10));
f.setBounds(30,30,200,200);
f.setVisible(true);
f.setTitle("Hello,World!");
f.add(new Button("Hello"));
f.add(new TextField(20));
}
}
4.3.3.2 BorderLayout:分区布局,按五大区域分块(与easyui相同)。
默认添加到Center区域中。
//Main.java
/**
* Demo
*/
package lee;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
/**
* @author sf2gis@163.com
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f=new Frame();
f.setLayout(new BorderLayout(20, 10));
f.setBounds(30,30,200,200);
f.setVisible(true);
f.setTitle("Hello,World!");
f.add(new Button("NORTH"),BorderLayout.NORTH);
f.add(new Button("WEST"),BorderLayout.WEST);
f.add(new Button("CENTER"),BorderLayout.CENTER);
f.add(new Button("EAST"),BorderLayout.EAST);
f.add(new Button("SOUTH"),BorderLayout.SOUTH);
f.pack();
}
}
4.3.3.3 GridLayout:表格,从左到右,从上到下组织。
//Main.java
/**
* Demo
*/
package lee;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
/**
* @author sf2gis@163.com
*
*/
public class Main {
/**
* @param args
*/</