------- 物联云培训、java培训、期待与您交流! ----------
AWT
抽象窗口工具包AWT (Abstract Window Toolkit) 是 Java 提供的建立图形用户界面GUI (Graphics User Interface)工具集,可用于生成现代的、鼠标控制的图形应用接口,并且可以无需修改,就可以在各种软硬件平台上运行。
AWT可用于Java的applet和applications中,AWT设计的初衷是支持开发小应用程序的简单用户界面。
它支持图形用户界面编程的功能包括:用户界面组件、事件处理模型、图形和图像工具(包括形状、颜色和字体类)和布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关。
Java的图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。用来提供人机交互的基本控制界面
类java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等,因此许多组件类也就继承了Component类的成员方法和成员变量,这些成员方法是许多组件都共有的方法,常见的成员方法
方法名 | 方法功能 |
void setBackground(Color c) | 设置组件的背景颜色 |
void setEnabled(boolean b) | 设置组件是否可用 |
void setFont(Font f) | 设置组件的文字 |
void setForeground(Color c) | 设置组件的前景颜色 |
void setLocation(int x, int y) | 设置组件的位置 |
void setName(String name) | 设置组件的名称 |
void setSize() | 设置组件的大小 |
void setVisible(boolean b) | 设置组件是否可见 |
boolean hasFocus() | 检查组件是否拥有焦点 |
int getHeight() | 返回组件的高度 |
int getWidth() | 返回组件宽度 |
容器Container也是一个类,它允许其他的组件被放置在其中。容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。
Container常用的有三个主要类型:窗口(Window)、面板(Panel)和 Applet,常用的有Panel,Frame, Applet
布局管理类
容器里组件的位置和大小是由布局管理器决定的,每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器
事件处理类
在JDK1.1及其以后的版本中,AWT采用委托事件模型进行事件处理,委托事件模型包括事件源、事件和事件监听器。
事件监听机制:
事件源:awt或Swing包中的组件
事件:每个事件源都有自己的特有对应事件和共性事件
监听器:将可以出发某一个事件的动作都已经封装到了监听器中。
publicclassGUITest {
GUITest()
{
init();
}
private Frame frame;
privateTextFieldtf;
private Buttonbut;
privateTextAreata;
publicvoidinit()
{
frame=new Frame("我的浏览器");
frame.setBounds(150,200,350, 350);
tf=newTextField(30);
but=new Button("转到");
ta=newTextArea(15,40);
frame.setLayout(newFlowLayout());
frame.add(tf);
frame.add(but);//把转到按钮添加到主窗体中
frame.add(ta);//把文本区域添加进去
frame.setVisible(true);//让窗体可见
MyEvent();
}
publicvoidMyEvent()
{
//让窗体关闭的监听器
frame.addWindowListener(newWindowAdapter() { //
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
//把目录中的内容添加到文本区域中
but.addActionListener(newActionListener() {
@Override
publicvoidactionPerformed(ActionEvente) {
// TODOAuto-generated method stub
String text = tf.getText();
ta.setText(text);
tf.setText(" ");
}
});
}
publicstaticvoid main(String[] args) {
newGUITest();
}
}
基本图形类
用于构造图形界面的类,如字体类(Font)、绘图类(Graphics)、图像类(Image)和颜色类(Color)等
Swing的含义:是Java在开发这个新的图形界面项的项目名称。
AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。
Swing是用Java实现的轻量级( light-weight)组件
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
Frame类
Java 中“窗口”被视为一个容器。它可以把各种不同的图形界面组件放置到这个容器中,而这些图形界面组件就是容器中的接口,通过图形界面组件所提供的方法,来完成一定的功能。
创建窗口的基本和必要操作包括如下步骤:
1、设置窗口的大小
2、给窗口一个标题
3、在屏幕的某个位置放置窗口
4、显示窗口
5、关闭窗口
import java.awt.*;
public classMyFrame extends Frame{
public static void main(String args[ ]){
MyFrame fr = new MyFrame("Hello OutThere!"); //构造方法
fr.setSize(200,200);
//设置Frame的大小,缺省为(0,0)
fr.setBackground(Color.red);
//设置Frame的背景,缺省为红色
fr.setVisible(true);
//设置Frame为可见,缺省为不可见
}
public MyFrame (String str){
super(str); //调用父类的构造方法
}
}
Pane类
import java.awt.*;
public classFrameWithPanel extends Frame{
public FrameWithPanel(String str){
super(str);
}
public static void main(String args[]){
FrameWithPanel fr = newFrameWithPanel("Frame with Panel");
Panel pan=new Panel();
fr.setSize(200,200);
fr.setBackground(Color.red);
//框架fr的背景颜色设置为红色
fr.setLayout(null);
//取消布局管理器
pan.setSize(100,100);
pan.setBackground(Color.yellow);
//设置面板pan的背景颜色为黄色
fr.add(pan); //用add方法把面板pan添加到框架fr中
fr.setVisible(true);
}
}
Label类的构造方法 | 主要功能 |
Label() | 创建一个没有文字的标签 |
Label(Strng str) | 创建一个以str为文字的标签 |
Label(String str,int align) | 创建一个以str为文字的标签,并以align 为对齐方式LEFT CENTER RIGHT 表示左中右 |
Label类的方法 | 主要功能 |
int getAligment() | 返回标签内文字的对齐方式 |
void setAligment(int align) | 设置标签内文字的对齐方式 |
String getText() | 获得标签内的文字 |
void setText(String text) | 设置标签内的文字 |
// 在窗口中的指定位置创建一个标签
import java.awt.*;
public class Window11_3 标签组件是用来在窗口
{ 中显示文字的组件,由Label类来创造
public static void main(String[] args)
{
Frame fra=new Frame("这是创建标签的程序 ");
Label b1=new Label(); // 创建一个空标签
fra.setBounds(0,0,300,200);
b1.setText("欢迎使用JAVA语言");//为标签添加文字
b1.setAlignment(Label.CENTER);//设置标签在窗口中央位置
b1.setBackground(Color.blue);//引用Componentlei的方法设置标签背景颜色
b1.setForeground(Color.red);
//引用Componentlei的方法设置标签中的文字颜色
fra.add(b1) ;
fra.setVisible(true);
}
}
Color类用来设置颜色,构造方法有两个
Color(float r,float g,float b);和
Color(int r,int g,int b);
其中r、g、b表示红绿蓝3色float 型取值范围0.0—1.0;int 型取值范围0-256
按钮组件
按钮组件提供用户快速启动某一动作的方法, 通过点击鼠标或按下键盘某键完成一定的操作。由java.awt类库的Button类创建
Button类的构造方法 | 主要功能 |
Button() | 创建一个没有标题的按钮 |
Button(String str) | 创建一个以str 为标题的按钮 |
Button类的方法 | 主要功能 |
String getLabel() | 获得按钮的标题 |
void setLabel(String str) | 获得设置按钮的标题为str |
import java.awt.*; // 创建 按钮
public class Window11_4 {
public static void main(String[] args) {
Frame fra=new Frame(" 创建按钮程序 ");
Button but=new Button("pushme"); // 创建一个按钮
fra.setBounds(0,0,300,200);
fra.add(but) ; //将按钮添加到窗口中
fra.setVisible(true); //显示窗口
}
}
import java.awt.*; // 创建一个给定大小尺寸的 按钮
public class Window11_5 {
public static void main(String[] args) {
Frame fra=new Frame(" 创建按钮程序 ");
Button but=new Button("pushme"); // 创建一个按钮
fra.setBounds(0,0,300,200);
fra.setLayout(null);//关闭页面设置
but.setBounds(50,50,100,50);//设置按钮的大小
fra.add(but) ; //将按钮添加到窗口中
fra.setVisible(true); //显示窗口
}
}
文本框
TextField类的构造方法 | 主要功能 |
TextField() | 创建一个空的文本框 |
TextField(int colnmns) | 创建一个空的文本框,具有指定的列 |
TextField(String text) | 创建一个包含有”text” 内容的文本框 |
TextField(String text,int colnmns) | 创建一个具有指定列且包含内容的文本框 |
TextField类的方法 | 主要功能 |
String getText() | 获得文本框的内容 |
int getColumns() | 获得文本框的列数 |
void setText(String text) | 设置文本框的内容为text |
void setColumns(int columns) | 设置文本框的列数 |
// 创建文本框
import java.awt.*;
public class Window11_6
{
public static void main(String[] args) throws Exception
{
Frame fra=new Frame(" 创建文本框程序 ");
TextField txt1=new TextField(10);
TextField txt2=new TextField(10);
fra.setBounds(0,0,300,200);
fra.setLayout(null);//关闭页面设置
txt1.setBounds(50,50,130,20);//设置文本框的大小
txt2.setBounds(50,70,130,20);
fra.add(txt1) ; //将 文本框添加到窗口中
fra.add(txt2) ;
fra.setVisible(true); //显示窗口
// System.in.read();
// System.exit(0);
}
}
LayoutManager 布局管理器
布局管理器决定容器中组件的尺寸和位置
java.awt包中共定义了五种布局编辑类,每个布局编辑类对应一种布局策略,分别是
FlowLayout(流式布局)
BorderLayout(边界布局)
GridLayout(格式布局)
GridBagLayout(格袋布局)
使用布局管理器布局界面的方法
为创建容器的布局管理器,可调用setLayout(LayoutManager, layout)方法,以布局类的实例为参数。例如:
FlowLayout flowLayout=newFlowLayout();//创建流布局类对象
Panel panelObj=new Panel();//创建容器类对象
panelObj.setLayout(flowLayout);
//panel对象调用以FlowLayout对象调用以FlowLayout布局类对象为参数的setLayout()方法,设置布局。
在pane()的构造方法中,有Pane(LayoutManager layout)构造符,在构造面板容器的同时指定布局管理器,因此上面可写成如下:
FlowLayout flowLayoutObj=new FlowLayout();
Panel panelObj=new Panel(flowLayoutObj);//以流布局类对象为参数
FlowLayout
是一种最基本的布局管理器
是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式
在容器中,从左到右依次放置GUI组件
当组件排到容器一行的末尾时,则从下一行开始接着排列组件
每行组件的对齐方式可以是: 左对齐、中间(默认对齐方式)和右对齐
import java.awt.*;
public classExGui{
private Frame f;
private Button b1;
private Button b2;
public static void main(String args[]){
ExGui that = new ExGui();
that.go();
}
public void go(){
f = new Frame("GUI example");
f.setLayout(new FlowLayout());
//设置布局管理器为FlowLayout
b1 = new Button("Press Me");
//按钮上显示字符"PressMe"
b2 = new Button("Don't PressMe");
f.add(b1);
f.add(b2);
f.pack();
//紧凑排列,其作用相当于setSize(),即让窗口
尽量小,小到刚刚能够包容住b1、b2两个按钮
f.setVisible(true);
}
}
BorderLayout
是容器Frame\JFrame和JApplet的默认布局方式
将容器分成五个区域,
NORTH (顶部)
SOUTH (底部)
WEST (左侧)
EAST (右侧)
CENTER (中间)
每个区域最多只能1个组件
import java.awt.*;
public classbuttonDir{
public static void main(String args[]){
Frame f = new Frame("BorderLayout");
f.setLayout(new BorderLayout());
f.add("North", new Button("North"));
//第一个参数表示把按钮添加到容器的North区域
f.add("South", newButton("South"));
//第一个参数表示把按钮添加到容器的South区域
f.add("East", newButton("East"));
//第一个参数表示把按钮添加到容器的East区域
f.add("West", newButton("West"));
//第一个参数表示把按钮添加到容器的West区域
f.add("Center", newButton("Center"));
//第一个参数表示把按钮添加到容器的Center区域
f.setSize(200,200);
f.setVisible(true);
}
}
GridLayout
布局管理器GridLayout按行与列将容器等分成网格
每个组件占用具有相同宽度和高度的网格
添加组件占用网格的顺序: 从上到下,从左到右
当一行满了,则继续到下一行,仍然是从左到右
GridBagLayout
GridBagLayout布局管理器是java.awt包中最灵活、同时又是最复杂的一种布局管理器,它类似于网格布局。GridBagLayout布局管理器把组件组织成长方形的网格,使用这种布局,可灵活地把组件放在长方形网格的任何行和列中,它也允许特定的组件跨多行和多列。
GridBagLayout类只有一个不带任何参数的构造函数,仅仅创建一个布局。为了指出组件的位置和尺寸的约束,必须使用GridBagContraints类对象,通过调用GridBagContraints类对象的属性变量限制组件的位置和尺寸。
创建GridBagConstraints:
GridBagContraints gbcObj=new GridBagConstraints();//创建
总结:1.Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。
2.Panel 无法单独显示,必须添加到某个容器中。Panel 的缺省布局管理器为FlowLayout。
3.当把Panel 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示多个组件,达到设计复杂用户界面的目的 。
4.如果采用无布局管理器 setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。
------- 物联云培训、java培训、期待与您交流! ----------