GUI(Graphics User Interface):图形用户界面
AWT (Abstract Window Tools):抽象窗口工具
AWT是个窗口框架,它从不同的平台的窗口系统(比如Window的窗口系统和UNIX的窗口系统)中抽象出共同的组件.在运行的时候,将这些组件的创建和动作委托给程序所在的运行平台的图形工具来处理,这样在编写AWT的图形应用的时候,我们只是指定了界面组件的位置和行为,Java就会创建真正使用和平台一致的对等体,这样就可以创建出和操作系统图形界面一致的图形应用,体现出“一次编写,到处运行”的宗旨但是在实际使用的时候,AWT有很多的问题.
后来Sun公司开发了一套新的图形界面库“Swing”.AWT是图形界面编程的基础,Swing是对AWT的补充和加强,而不是来替换AWT的
所有和AWT图形编程相关的类都在java.awt包和它的子包中,它的基础类是java.awt.Component类 在这个包中,提供了基本的java程序GUI设计工具: Component/MenuComponent Container LayoutManager 最基本的类Component,它表示一个可以以图形化的方式显示在屏幕上并能与用户交互的对象,比如一个按钮.一个标签等.组件不能独立的显示,必须将组件放置在一定的容器中(Container)才能显示出来.而Container是Component类的子类,可以放置其他的Component对象
容器(Container)是用来放置其他图形组件的一个对象. 它是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。 容器类对象可使用方法add(par)添加组件,其中参数用来指明要加入到容器中的组件.容器也是一个组件,也可以被添加到其他的容器中 两种主要的容器类型 Window:可独立存在的顶级窗口 Panel:可作为容器容纳其它组件,但不能独立存在,必须被添加到其它容器中(如Window 或 Applet)
组件的大小和位置由布局管理器(LayoutManager)决定。 如果不使用布局管理器则可以定制组件的大小和位置,但必须在容器中使用组件的setLocation(), setSize(), setBounds()方法确定大小位置
Awt中的布局管理器有:
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
事件(Event)
一个对象,它描述了发生什么事情 在java中多有的事件都是由特定的时间来处理的,Frame或其他组件本身没有处理事件的能力 事件源(Event source) – 产生事件的组件 事件发生后,就会触发相应的事件监听器(Listener),它也是一个Java对象,然后事件监听器会调用相应的方法对事件作会回应 事件处理方法(Event handler) – 能够接收、解析和处理事件类对象、实现和用户交互的方法
awt常用组件
Button 可接收点击操作的矩形
GUI组件
Canvas 用于绘图的面板
Checkbox 复选框组件
CheckboxMenuItem 复选框菜单项组件
Choice 下拉式列表框,内容不可改变
Component 组件类
Container 容器类
Scrollbar 滚动条组件
ScrollPane 带水平及垂直滚动条的容器组件
TextArea 多行文本域
TextField 单行文本框
Window 抽象的GUI窗口类,无布局管理器
模拟记事本小例子:
<span style="font-size:14px;">package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuDemo
{
private Frame f;
private MenuBar mb;
private Menu m1;
private Menu m2;
private MenuItem mi1, mi2, mi3, mi4, mi5;
private TextArea ta;
private File file;
MenuDemo(){
init();
}
public void init(){
f = new Frame("hehe");
f.setBounds(300,200,500,400);
//f.setLayout(new FlowLayout());
f.setLocationRelativeTo(null);
mb = new MenuBar();
m1 = new Menu("文件");
m2 = new Menu("编辑");
mi1 = new MenuItem("打开");
mi2 = new MenuItem("保存");
mi3 = new MenuItem("退出");
mi4 = new MenuItem("复制");
mi5 = new MenuItem("剪切");
ta = new TextArea();
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.add(mi2);
m1.addSeparator();
m1.add(mi3);
m2.add(mi4);
m2.add(mi5);
myEvent();
f.add(ta);
f.setMenuBar(mb);
f.setVisible(true);
}
public void myEvent(){
mi1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
FileDialog fd = new FileDialog(f,"打开",FileDialog.LOAD);
fd.setVisible(true);
String fileName = fd.getFile();
String dir = fd.getDirectory();
//System.out.println(dir+":::"+fileName);
if(dir!=null && fileName!=null){
file = new File(dir,fileName);
if(file.exists()){
f.setTitle(" - "+fileName);
ta.setText("");
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(file));
String line = null;
while((line = br.readLine())!=null){
ta.append(line+"\r\n");
}
}catch(IOException ex){
}finally{
if(br!=null)
try{
br.close();
}catch(IOException ex){
}
}
}
}
}
});
mi2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
FileDialog fd = new FileDialog(f,"保存",FileDialog.SAVE);
if(file == null){
fd.setVisible(true);
String dir = fd.getDirectory();
String fileName = fd.getFile();
if(dir!=null&&fileName!=null){
file = new File(dir,fileName);
f.setTitle(" - "+fileName);
}
}
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter(file));
bw.write(ta.getText());
}catch(IOException ex){
}finally{
if(bw!=null)
try{
bw.close();
}catch(IOException ex){
}
}
}
});
mi3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MenuDemo();
}
}
</span>