您的位置:首页 > 编程语言 > Java开发

Java学习之图形界面编程AWT

2009-08-03 19:19 441 查看
AWT(Abstract Window Toolkit)
,抽象窗口工具包,
SUN
公司提供的用于图形界面编程
(GUI)
的类库。基本的
AWT
库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(
Windows

Unix

Macintosh
—苹果操作系统等)的本地
GUI
工具进行处理。

容器里组件的位置和大小是由布局管理器来决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,它将调用布局管理器来完成。当决定一个组件的大小时,也是如此。


AWT
中,给我们提供了五种布局管理器:

BorderLayout
FlowLayout

GridLayout
CardLayout
GridBagLayout

AWT
事件模型

Events(
事件
)
:描述发生了什么的对象。

Event source(
事件源
)
:事件的产生器。

Event handlers(
事件处理器
)
:接收事件对象、解释事件对象并处理用户交互的方法。

事件监听器:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。

----------------------------------------------------------Frame-----------------------------------------------------

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class FrameTest {

public
static void main(String args[]) throws IOException{

final
Frame f=new Frame();

/*
在构造
FileDialog
文件对话框的对象时,参数部分调用了
Frame
窗体的对象
f

在方法当中,所定义的匿名内部类要访问外部的局部变量或者本地变量,需要将变量声明为
final

*/

System.out.println("========================
设置窗体属性
========================");

f.setSize(500,
400);

f.setLocation(420,
250);

f.setBackground(Color.GRAY);

f.setLayout(new
BorderLayout(10,10));//
按照东南西北中
5
个方位排列,也是默认缺省的布局管理器

//f.setLayout(new
FlowLayout(FlowLayout.CENTER));//
流式布局管理器

//f.setLayout(new
GridLayout(3,3,10,10));//
网格状布局管理器

//f.setLayout(new
CardLayout(10,10));//
卡片布局管理器

//f.setLayout(new
GridBagLayout());//

System.out.println("========================
给窗体添加按钮
========================");

Button
b1=new Button("North");

Button
b2=new Button("South");

Button
b3=new Button("West");

Button
b4=new Button("East");

Button
b5=new Button("Center");

f.add(b1,"North");

f.add(b2,"South");

f.add(b3,"West");

f.add(b4,"East");

f.add(b5,"Center");

f.addWindowListener(new
WindowAdapter() {//
方法
1 WindowListener
事件,实现
Frame
窗体关闭操作

public void windowClosing(WindowEvent
e) {

System.exit(0);
//System
类的
exit
方法
终止当前正在运行的
Java
虚拟机

}

});

//f.addWindowListener(new
WindowListenerMethod2()); //
调用方法
2

addWindowListener
方法

//f.addWindowListener(new
WindowListenerMethod3()); //
调用方法
3

addWindowListener
方法

/*WindowListener
用于接收窗口事件的侦听器接口
,
需要处理窗口事件的类可以有
2
种方法

1.
实现
WindowListener
此接口

2.
扩展抽象类
WindowAdapter
,仅需要重写所需的方法

然后使用窗口的
addWindowListener
方法将从该类所创建的侦听器对象向该
Frame
注册

当通过打开、关闭、激活或停用、图

标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,

并将
WindowEvent
传递给该方法

*/

System.out.println("========================
给窗体添加菜单
========================");

MenuBar
mb=new MenuBar();//
菜单栏

Menu m1=new Menu("
文件
");//
菜单

Menu
m2=new Menu("
编辑
");

MenuItem mi1=new MenuItem("
新建
");//
菜单项

MenuItem
mi2=new MenuItem("
打开
");

MenuItem
mi3=new MenuItem("
保存
");

MenuItem
mi4=new MenuItem("
退出
");

MenuItem
mi5=new MenuItem("
复制
");

MenuItem
mi6=new MenuItem("
粘贴
");

m1.add(mi1);

m1.add(mi2);

m1.add(mi3);

m1.add(mi4);

m2.add(mi5);

m2.add(mi6);

mb.add(m1);

mb.add(m2);

f.setMenuBar(mb);//
把菜单栏添加到
Frame
窗体中

System.out.println("======================
添加只有一行的文本区
======================");

TextField
tf=new TextField(10);

f.add(tf,"North");

System.out.println("========================
添加文本域
========================");

final
TextArea ta=new TextArea();

f.add(ta);

System.out.println("=================
以下为操作事件的侦听器接口
=================");

mi1.addActionListener(new
ActionListener(){
//
新建

public
void actionPerformed(ActionEvent e){

ta.setText("
");

}

});

mi4.addActionListener(new
ActionListener(){
//

"
退出
"
菜单项添加退出事件

public
void actionPerformed(ActionEvent e){

System.exit(0);

}

});

f.setVisible(true);

}

}

class WindowListenerMethod2 implements
WindowListener {
//
方法
2

public
void windowActivated(WindowEvent e) {

}

public
void windowClosed(WindowEvent e) {

}

public
void windowClosing(WindowEvent e) {

System.exit(0);

}

public
void windowDeactivated(WindowEvent e) {

}

public
void windowDeiconified(WindowEvent e) {

}

public
void windowIconified(WindowEvent e) {

}

public
void windowOpened(WindowEvent e) {

}

}

class WindowListenerMethod3 extends
WindowAdapter
//
方法
3

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

--------------------------------------------------------Panel--------------------------------------------------------

import java.awt.*;

import java.awt.event.*;

public class PanelTest extends Frame

{

/*Panel

是最简单的容器类
,
也可以成为面板

应用程序可以将其他组件放在
Panel
提供的空间内,这些组件包括其他
Panel

Panel
的默认布局管理器是
FlowLayout

布局管理器

将多个
panel
放置在一个
Frame
中,每个
panel
可以使用一种布局,将每种布局的
panel
用一个方法来控制

*Frame

Panel
都属于
java.awt


*WindowListener

ActionListener
属于
java.awt.event
事件类

*

* */

private Panel borderPanel;

private Panel flowPanel;

private Panel gridPanel;

private Panel cardPanel;

public PanelTest(String title)

{

super(title);
//
虽然
PanelTest
类已经继承
Frame
类,但设置标题还需要使用
super
调用父类的构造器设置标题

setSize(600,400);
//
定义
Frame
窗体的大小

setLocation(100,100);
//
定义
Frame
窗体从屏幕左上角起向右延伸的
xy
轴的位置

setBorderLayoutPanel();
//
初始化
4

Panel

setFlowLayoutPanel();

setGridLayoutPanel();

setCardLayoutPanel();

setLayout(new GridLayout(2,2));

//
定义整个
Frame
窗体使用网格状布局管理方式

add(borderPanel);
//
添加所有的
Panel

add(flowPanel);

add(gridPanel);

add(cardPanel);

addWindowListener(new WindowAdapter() {

//WindowListener
事件,实现
Frame
窗体关闭操作

public void windowClosing(WindowEvent e) {

System.exit(0);
//System
类的
exit
方法
终止当前正在运行的
Java
虚拟机

}

});

}

public void setBorderLayoutPanel()

{

borderPanel=new Panel();

borderPanel.setLayout(new BorderLayout());

Button btn1=new Button("North");

Button btn2=new Button("South");

Button btn3=new Button("West");

Button btn4=new Button("East");

Button btn5=new Button("Center");

borderPanel.add(btn1,BorderLayout.NORTH);

borderPanel.add(btn2,BorderLayout.SOUTH);

borderPanel.add(btn3,BorderLayout.WEST);

borderPanel.add(btn4,BorderLayout.EAST);

borderPanel.add(btn5,BorderLayout.CENTER);

}

public void setFlowLayoutPanel()

{

flowPanel=new Panel();

Button btn1=new Button("mybole");

btn1.addActionListener(new ActionListener() {
//
使用匿名内部类来实现
ActionListener
接口

/*ActionListener
用于接收操作事件的侦听器接口,对处理操作事件的类可以实现此接口

而使用该类创建的对象可使用组件的
addActionListener
方法向该组件注册

在发生操作事件时,调用该对象的
actionPerformed
方法。

*

*
*/

public void actionPerformed(ActionEvent e) {

Button
b=(Button)e.getSource();

if(b.getLabel()=="mybole"){

b.setLabel("weixin");

}

else {

b.setLabel("mybole");

}

}

});

Button btn2=new Button("winsun");

flowPanel.add(btn1);

flowPanel.add(btn2);

}

public void setGridLayoutPanel()

{

gridPanel=new Panel();

gridPanel.setLayout(new GridLayout(2,2));

Button btn1=new Button("Button1");

Button btn2=new Button("Button2");

Button btn3=new Button("Button3");

Button btn4=new Button("Button4");

gridPanel.add(btn1);

gridPanel.add(btn2);

gridPanel.add(btn3);

gridPanel.add(btn4);

}

public void setCardLayoutPanel()

{

final CardLayout cl=new CardLayout();

cardPanel=new Panel();

cardPanel.setLayout(cl);

Button btn1=new Button("
黑桃
A");

Button btn2=new Button("
红桃
K");

ActionListener al=new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

cl.next(cardPanel);
//CardLayout
布局的
next()
方法
翻转到指定容器的下一张卡片

}

};

//
通过此事件
将完成在
CardLayout
布局的
Panel


按钮之间切换
(
翻转
)
的功能

btn1.addActionListener(al);

btn2.addActionListener(al);

cardPanel.add(btn1,"1");

cardPanel.add(btn2,"2");

}

public static void main(String[] args) throws HeadlessException

{

PanelTest pt = new PanelTest("http://www.mybole.com.cn");

pt.setVisible(true);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: