黑马程序员 GUI
2013-12-13 19:34
405 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
GUI (Graphical User Interface) 图形用户界面:
当年一个Windows系统覆盖了整个地球,就因其图形化的界面操作。对于非程序开发人员来说,图形界面比命令行的方式要好用的多,人脑对图形的记忆远比记住一些特定的命令轻松。但是对于开发人员来说,制作图形化界面是一件非常麻烦的事情,要写许多重复的代码。所以现在出了很多的界面制作的工具,可以通过控制画图来自动生成代码,不再需要我们去手写了。
这里只是介绍下GUI界面的实现方式以及事件监听机制的原理,让我们能理解GUI界面是通过什么原理实现的。当真正去做的时候,还是用现成的工具方便的多。
Awt和Swing:
1. java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
2. javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
GUI构架组成:
布局管理器:
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1. FlowLayout(流式布局管理器)从左到右的顺序排列。Panel默认的布局管理器。
2. BorderLayout(边界布局管理器)东,南,西,北,中Frame默认的布局管理器。
3. GridLayout(网格布局管理器)规则的矩阵
4. CardLayout(卡片布局管理器)选项卡
5. GridBagLayout(网格包布局管理器)非规则的矩阵
通过添加这些容器和组件,加上合理的布局。就能构成一个图形化界面,但是这仅仅是一个界面而已,怎么使它按照我们想要的方式开始工作呢?这就是事件监听机制。
事件监听机制:
1. 确定事件源(容器或组件)
2. 通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
3. 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
4. 一般用匿名内部类来表示。
5. 在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
6. 事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
下面创建一个输入路径显示其下文件夹和文件名的界面:
GUI界面的布局不是需要重点掌握的内容,我们需要详细了解的就是事件监听机制,如何写出执行效果来。
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
GUI (Graphical User Interface) 图形用户界面:
当年一个Windows系统覆盖了整个地球,就因其图形化的界面操作。对于非程序开发人员来说,图形界面比命令行的方式要好用的多,人脑对图形的记忆远比记住一些特定的命令轻松。但是对于开发人员来说,制作图形化界面是一件非常麻烦的事情,要写许多重复的代码。所以现在出了很多的界面制作的工具,可以通过控制画图来自动生成代码,不再需要我们去手写了。
这里只是介绍下GUI界面的实现方式以及事件监听机制的原理,让我们能理解GUI界面是通过什么原理实现的。当真正去做的时候,还是用现成的工具方便的多。
Awt和Swing:
1. java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
2. javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
GUI构架组成:
布局管理器:
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1. FlowLayout(流式布局管理器)从左到右的顺序排列。Panel默认的布局管理器。
2. BorderLayout(边界布局管理器)东,南,西,北,中Frame默认的布局管理器。
3. GridLayout(网格布局管理器)规则的矩阵
4. CardLayout(卡片布局管理器)选项卡
5. GridBagLayout(网格包布局管理器)非规则的矩阵
通过添加这些容器和组件,加上合理的布局。就能构成一个图形化界面,但是这仅仅是一个界面而已,怎么使它按照我们想要的方式开始工作呢?这就是事件监听机制。
事件监听机制:
1. 确定事件源(容器或组件)
2. 通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
3. 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
4. 一般用匿名内部类来表示。
5. 在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
6. 事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
下面创建一个输入路径显示其下文件夹和文件名的界面:
package test; import java.awt.Button; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; public class MyWindowDemo { private Frame f; private TextField tf; private Button but; private TextArea ta; private Dialog d; private Label lab; private Button okBut; MyWindowDemo(){ init(); //在构造函数里面创造 } //创建一个界面里的各种内容,文本框、转到按钮、文本区域、对话框等 public void init(){ f = new Frame("一个显示文件夹里面内容的窗口"); f.setBounds(300, 150, 550, 450); f.setLayout(new FlowLayout()); tf = new TextField(60); but = new Button("转到"); ta = new TextArea(25, 60); d = new Dialog(f, "提示", true); d.setBounds(400, 300, 270, 120); d.setLayout(new FlowLayout()); lab = new Label(); okBut = new Button("确定"); d.add(lab); d.add(okBut); f.add(tf); f.add(but); f.add(ta); myEvet(); //添加时间监听 f.setVisible(true); } public void myEvet(){ //关闭窗口 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); //关闭对话框 d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ d.setVisible(false); } }); //关闭对话框 okBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); //转到操作,按enter键执行 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e){ if(e.getKeyCode()==KeyEvent.VK_ENTER) showDir(); } }); //转到操作,鼠标点击转到执行 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ showDir(); } }); } public void showDir(){ String dirPath = tf.getText(); tf.setText(""); //清空文本框 ta.setText(""); //清空文本区域 File file = new File(dirPath); if( file.exists() && file.isDirectory()){ String[] names = file.list(); for(String name: names){ ta.append(name+"\r\n"); } } else{ String info = "你输入的路径:"+dirPath+"不存在,请重新输入"; lab.setText(info); d.setVisible(true); //让对话框出现 } } public static void main(String args[]){ new MyWindowDemo(); //创建界面 } }这样就能执行出和我们一般打开文件夹的效果来:
GUI界面的布局不是需要重点掌握的内容,我们需要详细了解的就是事件监听机制,如何写出执行效果来。
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- NSNumber,NSInteger,NSUInteger
- Android UI--开源项目IndexableListView(字母索引)
- SQRL Secure Quick Reliable Login 安全快速可靠登陆
- easyui中使用复选框问题
- Android Uevent 分析,从kernel到framework
- alter index rebuild & alter index rebuild online
- The currently displayed page contains invalid values
- gpio_direction_output 与 gpio_set_value
- 临时解决UIImagePickerController在可编辑模式下选择相册图片后不能上移的bug
- easyui datagrid自定义按钮列,即最后面的操作列
- Qt解析QSqlDatabase、QSqlQuery类操作数据库
- 实现easyui的datagrid导出为excel
- YUI CSS框架学习笔记一
- Field 'SCHED_TIME' doesn't have a default value
- IOS7 UI新变化
- SeekBar OpenGLRenderer GL_INVALID_VALUE
- Sequence 优先队列模拟堆 poj 2442
- easy ui datagrid 当前页添加修改删除数据
- 界面库Prof-UIS初探学习
- 预装win8和UEFI的系统上装Ubuntu13.04双系统