------- android培训、java培训、期待与您交流! ----------
GUI(图形用户界面)
GUI:图形用户接口,用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI:命令行用户接口。就是常见的DOS命令操作,需要记忆一些常用的命令,操作不直观。
JAVA为GUI提供的对象都存在java.Awt,javax.Swing两个包中。
举例:
比如:创建文件夹,或者删除文件夹等。
java.Awt与javax.Swing
java.Awt:抽象窗口工具包,需要调用本地系统方法实现功能,属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属轻量级控件。
GUI图例:
component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。
Component类是与菜单不相关的 Abstract Window Toolkit组件的抽象超类。还可以直接扩展类 Component来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。
事件监听机制
事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标,按下键盘等操作,就需要使用AWT的事件处理机制。
事件监听机制的特点:
1、事件源
2、事件
3、监听器
4、事件处理
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
例:
f.addWindowListener(newWindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。。。");
}
public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了。。。");
}
});
事件监听流程图:
让按钮具备退出程度的功能
按钮就是事件源
那么选择哪个监听器呢?
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器
需要查看该组件对象的功能
通过查阅button的描述,发现按钮支持一个特有监听addActionListener.
练习:GUI鼠标事件
but.addActionListener(new ActionListener()
{
publicvoid actionPerformed(ActionEvent e)
{
System.out.println("actionok");
}
});
but.addMouseListener(newMouseAdapter()
{
privateint count = 1;
privateint clickCount = 1;
publicvoid mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
publicvoid mouseClicked(MouseEvent e)
{
if(e.getClickCount()== 2)
System.out.println("点击动作"+clickCount++);
}
});
GUI键盘事件
but.addMouseListener(new MouseAdapter()
{
privateint count = 1;
privateint clickCount = 1;
publicvoid mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
publicvoid mouseClicked(MouseEvent e)
{
if(e.getClickCount()== 2)
System.out.println("点击动作"+clickCount++);
}
});
//键盘事件
but.addKeyListener(newKeyAdapter()
{
publicvoid keyPressed(KeyEvent e)
{
if(e.isControlDown()&& e.getKeyCode() == KeyEvent.VK_ENTER)
System.out.println("ctrl+enteris run");
//System.out.println(e.getKeyChar()+".."+e.getKeyCode());
}
});
tf.addKeyListener(newKeyAdapter()
{
publicvoid keyPressed(KeyEvent e)
{
intcode = e.getKeyCode();
if(!(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9))
{
System.out.println(code+"...是非法的");
e.consume();
}
}
});
图例:
布局管理器
在java.awt包中提供了五种布局管理器,分别是FlowLayout(流式布局管理器),BorderLayout(边界布局管理器),GridLayout(网格布局管理器),GridBagLayout(网格包布局管理器),CardLayout(卡片布局管理器)。
每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局。
图例:
FlowLayout布局管理器的特点就是可以将所有组件像流水一样依次进行排列,不需要用户明确地设定,但是在灵活性上相对差了点。
BorderLayout是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东、南、西、北、中。组件可以被放置在这五个区域中的任意一个。
图例:
当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法,其中参数constraints是Object类型,在传参时可以使用BorderLayout类提供的五个常量,分别是EAST、SOUTH、WEST、NORTH和CENTER。
GridLayout使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1 列(左上角)的网格中,然后在第1行的网格从左向右依次放置其他组件,行满后,继续在下一行从左到右放置组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。
图例:
GridBagLayout是最灵活、最复杂的布局管理器,与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。
使用GridBagLayout布局管理器的步骤如下:
1、创建GridBagLayout布局管理器,并使容器采用该布局管理器。
2、创建GridBagLayout对象,并设置该对象的相关属性。
3、调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联。
4、向容器中添加组件。
图例: