一. 概述: GUI图形用户界面
GLI命令行
二. 包
java.Awt:抽象窗口工具包,需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由JAVA实现。增强了移植性,属轻量级控件。
三. 继承关系
Component:
Button
Label
Checkbox
TextComponent:TextArea、TextField
Container: Window:
Frame
Dialog:FileDialog
Panel
四. 布局管理器
容器中的组件的排放方式,称为布局
流式布局:FlowLayout
边界布局:BorderLayout
网格布局:GridLayout
卡片布局:CardLayout
网格包布局:GridBagLayout
坐标式布局
五. 实例
创建图形化界面:
1. 创建frame窗体
2. 对窗体进行基本设备,比如大小,位置,布局
3. 定义组件
4. 将组件通过窗体的add方法添加到窗体中。
5. 让窗体显示,通过setVisible(true)
Frame f = new Frame(“wode frame”);
f.setSize(500,200);//x,y 设置窗体大小
f.setLocation(300,200);//设备窗体显示的位置
f.setLayout(newFlowLayout());
Botton b = newButton(“按钮”);
f.add(b);
f.setVisible(true);
六. 事件监听机制
1. 将监听器注册到事件源
2. 有监听器所监听的动作作于事件源上
3. 产生事件对象
4. 将事件对象传给事件处理方式
事件监听机制的特点:
1. 事件源:就是awt包或者swing包中的那些图形界面组件
2. 事件:每一个事件源都有自己特有的对应事件和共性事件
3. 监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中
以上三者,在JAVA中都已经定义好了,直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处理。
4. 事件处理:
//因为WindowListener的子类WindowAdapter已经实现了WindowListener的方法。所以只需要继承WindowAdapter类,复写所需要的方法即可。
f.addWindowListener(new WindowAdapter(){
public voidwindowClosing(WindowEvent e){
System.out.println(“close”);
System.exit(0);
}
});
七. Action事件
//让按钮具备退出程序的功能,按钮就是事件源。通过查阅button的描述,发现按钮支持一个特有监听:addActionListener。
but.addActionListener(new ActionListener(){
public voidactionPerformed(ActionEvent e){
System.exit(0);
}
});
八. 鼠标、键盘事件
but.addMouseListener(newMouseAdapter(){
public voidmouseEntered(MouseEvent e){
System.out.println();
}
publicvoid mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
System.out.println(“双击动作”);
}
}
});
-------键盘
but.addKeyListener(newKeyAdapter(){
public voidkeyPressed(KeyEvent e){
//组合键,按下ctrl+enter键执行
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
System.exit(0);
}
}
});
-------文本框:只允许填写数字
tf.addKeyListener(newKeyAdapter(){
public void keyPressed(KeyEvent e){
int code= e.getKeyCode();
if(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9){
System.out.println(“非法输入”);
e.consume();
}
}
});
九. 练习
资源管理器
地址栏、转到按钮、文本域
Dialog:提示框
菜单:MenuBar
importjava.awt.*;
importjava.awt.event.*;
class MyMenuDemo{
private Frame f;
private MenuBar mb;
private Menu m,submenu;
private MenuItem closeItem,subItem;
MyMenuDemo(){
init();
}
}
publicvoid init(){
f = new Frame(“my window”);
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb = new MenuBar();
m = new Menu(“文件”);
subMenu = new Menu(“子菜单”)
subItem= new MenuItem(“子条目”);
closeItem = new MenuItem(“退出”);
subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
privatevoid myEvent(){
f.addWindowClosing(WindowEvent e){
System.exit(0);
}
};
publicstatic void main(String[] args){
new MyMenuDemo();
}
FileDialog:选取对话框
newFileDialog(f , “打开”,fileDialog.LOAD);
newFileDialog(f , “保存”,fileDialog. SAVE);
十. JAR包
javac –d c:\myclass MyMenuTest.java
新建一个文件:1.txt
内容:Mian-Class:空格mymenu.myMenuTest回车
jar -cvfm my.jar 1.txt mymenu
MANIFEST.MF