您的位置:首页 > 产品设计 > UI/UE

黑马程序员 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()获取。)

下面创建一个输入路径显示其下文件夹和文件名的界面:

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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: