------- android培训、java培训、期待与您交流! ----------
GUI
当我们与计算机进行交互有两种方式,GUI和CLI 。
GUI Graphical User Interface(图形用户接口)。用图形的方式,来显示计算机操作的界面,这样
更方便直观。
CLI Command line User Interface (命令行用户接口)。就是常见的Dos命令行操作。需要记忆一
些常用的命令,操作不直观。
普通用户在计算机上的操作几乎都使用的GUI。
举例: 比如:创建文件夹,或者删除文件夹等。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
java.Awt:
Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:
在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
这里学习AWT包中的对象。
GUI中组件的继承关系图
Component表示组件,是这个体系的顶层超类。它下面又分为两支,Container和非Container。
Container为容器,可以加入其它组件,而右边的组件不能加入其它组件。
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器,并且加入Frame中组件将居中覆盖全部区域,后加入的组件将覆盖先加入的。
GridLayout(网格布局管理器)
规则的矩阵,如拨号盘。
CardLayout(卡片布局管理器)
选项卡。
GridBagLayout(网格包布局管理器)
非规则的矩阵,网页上的移动广告标签。
创建图形化界面:
Frame
是带有标题和边框的顶层窗口。它的父类Window
对象是一个没有边界和菜单栏的顶层窗
口。所以要创建一个可见窗口时必须使用Frame对象。
步骤
1,创建frame窗体。
2,对窗体进行基本设置。比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
Frame f = new Frame(“my window”);
f.setLayout(new FlowLayout());//设置布局
f.setSize(500,400);//设置窗体大小
f.setLocation(300,200);//设置窗体出现在屏幕的位置
f.setVisible(true);//使窗口可见
创建这个窗口后发现窗口无法关闭,这是因为这个窗口只有界面,而没有添加效果。java提供
了事件监听机制来对组件添加效果,当我们操作某个组件时,就会有相应的效果。
事件监听机制
事件监听机制组成
1.事件源(组件)
2.事件(Event)
3.监听器(Listener)
4.事件处理(引发事件后处理方式)
事件源:就是awt包或者swing包中的那些图形界面组件,就是上面GUI中的组件。
事件:每一个事件源都有自己特有的对应事件和共性事件,可认为是对窗口的操作。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
事件监听机制流程图
可以看出我们首先需要将将监听器对象注册到事件源上(通过add方法),并且要预先定义好事件的处理方式,这样一旦有事件作用到事件源上,监听器就会将事件包装成对象并传递给事件处理方式,事件处理方式就将采用相应的处理(不同的事件,采用不同的处理)。
定义事件处理方式
由上图可知要让组件具备某种效果,还需要在事件处理方式中定义。
不同的监听器对应不同的事件源,通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上,方法中接受的是该监听器对象,由于监听器是接口,其中的方法都是抽象的,这就需要我们覆盖这些方法,有的监听器中很多方法(其中有的是我们窗口中用不到的),如果全部覆盖,势必影响效率。
API提供了适配器,实现了相应的监听器接口,复写了监听器中的方法,但是这些方法都为空,调用这些方法时会没有任何效果,也不会抛出异常,这时我们就可以根据需要复写相应的方法。有的监听器中方法较少没有适配器,如ActionListener只有一个方法actionPerformed,所以没有适配器。
不同的监听器对应不同的事件
窗体事件
由WindowListener监听。监听的操作就是窗体上的事件,包括窗体的关闭,激活,打开等等。应用于Window及其子类。
示例
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e){
System.out.println("我活了。");
}
public void windowOpened(WindowEvent e){
System.out.println("我被打开了,哈啊哈");
}
});
Action事件
有ActionListener监视。监听器中只有一个方法actionPerformed,所以此监视器没有适配器。ActionEvent表示当特定于组件的动作(比如被按下)发生时,由组件(比如 Button
)生成此高级别事件。
//but以被定义为一个Button
but.addActionListener(new ActionListener(){
//public void actionPerformed(ActionEvent e)
public void actionPerformed(ActionEvent e)
{
System.out.println("action ok");
}
});
键盘事件
由MouseListener监听。
监视的操作包括按下,释放,及键入某个键的方法,常用按下方法。
在KeyEvent中键盘上的每个键都被定为了常量,还可通过getKeyCode()获取键对应的keyCode,
getKeyChar()返回与此事件中的键关联的字符。例如,shift + "a" 的KEY_TYPED事件(表示键入的值)返回值 "A"。
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){
System.out.println(code+"..是非法的");
//表示不会按照默认的方式由产生此事件的源代码来处理此事件
//在这里表示字符将不会存入tf中
e.consume();
}
}
});
but.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
//首先判断ctlr是否被按下,在判断enter键是否被按下
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("ctrl+enter is run");
}
});
鼠标事件
由MouseListener监视,监视的鼠标操作包括,点击,进入某组件,在组件上按下,释放等。
but.addMouseListener(new MouseAdapter(){
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e){
///getClickCount获取鼠标点击次数
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
}
});
菜单
在GUI中菜单是一个比较特殊的对象。Frame对象不能通过add方法将菜单加入到窗体中,而要使用setMenuBar(MenuBar b)来添加菜单。
菜单继承体系
抽象类MenuComponent是所有与菜单相关的组件的超类。在这一方面,类 MenuComponent与 AWT 组件的抽象超类Component相似。
MenuBar表示一个菜单平台概念,通过调研Frame的SetMenuBar方法可以将菜单栏与Frame关联。
MenuItem表示菜单项,它的子类Menu表示菜单。
在窗体中添加菜单:
1.先创建菜单条 MenuBar。
2.再创建菜单 Menu,每一个菜单中建立菜单项 MenItem。
也可以菜单添加到菜单中,作为子菜单,因为Menu是MenuItem的子类。
3.通过setMenuBar()方法,将菜单添加到Frame中。
在窗体上加入菜单组件
//定义窗体,及其组件
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);
在菜单项上注册监听器
//在菜单项上添加监听器
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
------- android培训、java培训、期待与您交流! ----------