您的位置:首页 > 职场人生

黑马程序员——Java基础---图形化界面

2015-04-11 14:38 225 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

第一部分    图形化界面基本概述

一.人机交互的两种方式
1.GUI

1)Graphical User Interface(图形用户接口)
        图形化界面:用图形的方式来显示计算机操作的界面,这样更方便直观,使用者易于 接受,容易上手操作。
2.CLI

1)Command line User Interface(命令行用户接口)
        命令行方式:需要有一个控制台,输入特定的 指令,让计算机完成一些操作。较为麻烦,需 要记录住一些命令。就是常见的Dos命令行操作。

2)dos命令行,课程中常见的命令。 
         dir : 列出当前目录下的文件以及文件夹 
        md : 创建目录 
        rd : 删除目录 
        cd : 进入指定目录 

 cd.. : 退回到上一级目录 
        cd/ : 退回到根目录 

 del : 删除文件 
        exit : 推出dos命令行

二.图形化界面工具
1.Java.Awt包

1)java.Awt:Abstract Window ToolKit(抽象窗口工具包)

需要调用本地系统方法实现功能。属于重量级控件。

2)特点

跨平坦性弱,更依赖于平台(跨平台后,个别属性有变化)。
2.Java.Swing包

1)Java.Swing

在AWT的基础上,建立的一套图形化界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属轻量级控件。

2)特点 

不依赖平台,功能更强。

三.常用的体系继承。




 
Component(组件)---|Button(按钮)
                    ---|Label(标签)(封装文字)
                  
---|Checkbox(复选框)
   
                ---|TextComponet(文本组件)---|TextArea(文本区域)
                   ---|TextField(文本框)
   
                ---|Container(容器) --------------|Panel(面板)
                                                 ---|Window(窗口) ---|Frame(框架)
                                                
 ---|Dialog(对话框)---|FileDialog(文件对话框)
 
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
 
四.布局管理器
 
1.概念:容器中的组件的排放方式,就是布局
 
2.常见的布局管理器:

1)FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器
2)BorderLayout(边界布局管理器)
东,南,西,北,中(默认居中,填充,添加新组建覆盖)
Frame默认的布局管理器。
3)GridLayout(网格布局管理器)
规则的矩阵(例如:计算器)
4)GardLayout(卡片布局管理器)
选项卡
5)GridBagLayout(网格包布局管理器)
非规则的矩阵(占用多个格子)
最方便的布局是坐标式布局(C语言)。
 
五.创建图形化界面。
 
1.创建frame窗体

Frame f=new Frame("my Awt");

创建一个标题为”my Awt”的窗口框架对象
2.对窗体进行基本设置(比如:大小位置布局)

f.setSize(500,400);

将组件移到新位置,继承Component方法
3.定义组建

Button b=new Button("按钮");

定义一个名称为”按钮”的按钮
4.将组件通过窗体的add方法添加到窗体中

f.setLayout(new FlowLayout());

添加按钮到窗口框架,默认为边界布局。继承Container方法
5.让窗体显示

setVisible(true)
 
六.事件监听机制
 
1.事件源。

就是awt包或者swing包中的那些图形界面组件。

界面上虚线框在哪,哪就是当前事件源。
2.事件。

每一个事件源都有自己特有的对应事件和共性事件。
3.监听器。

将可以触发每一个事件的动作(不止一个动作),都已经封装到监听器中。

适配器:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。

扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。

监听器方法超过三个的都配有适配器。

例如:WindowAdapter。
4.事件处理。

引发事件后处理方式
5.事件监听机制流程图



 
 
6.常见事件的分类

1)窗口事件

对框架窗口操作的事件

AddWindowListener: 添加指定的窗口侦听器,以从此窗口接收窗口事件。

2)Action事件(没有适配器)

对按钮操作的事件。也可以叫活动监听。键盘鼠标都可以操作。

AddActionListener:添加指定动作的侦听器,以接收发自指定按键的动作事件。

3)鼠标事件

鼠标动作产生的事件。属于Component组件中。

AddMouseListener:添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。

双击事件:判断e.getClickCount()次数。

4)键盘事件

键盘动作产生的事件。属于Component组件中。

AddKeyListener:添加指定的按键侦听器,以接收发自此组件的按键事件。

Esc退出:判断e.getKeyCode()==KeyEvent.VK_ESCAPE

组合键:判断e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER

consume:键入有效的值。也就是屏蔽键。

 

第二部分  组件应用

 
一.对话框Dialog
 

1.概念:Dialog 是一个带标题和边界的顶层窗口。

2.建立对象

Dialog d=new Dialog(Dialog owner, String title, boolean modal)

owner:依赖窗口;title:标题;modal:模式(定义窗口弹出后其他窗体是否可以操作)

d.add(Label):添加时间描述信息。

 
二.菜单
 

1.Menu 

对象是从菜单栏部署的下拉式菜单组件。

2.MenuBar

绑定到框架的菜单栏的平台

3.MenuItem

默认的 MenuItem 对象包含一个简单的加标签的菜单项

包含关系:菜单栏里添加菜单,菜单里可以添加菜单项,菜单里可以添加菜单。

 
三.文本区域
 

1.TextArea对象是显示文本的多行区域。可以将它设置为允许编辑或只读。

2.构造函数TextArea(int rows,int columns)

构造一个新文本区,该文本区具有指定的行数和列数,并将空字符串作为文本。

3.append(String str): 将给定文本追加到文本区的当前文本。
四.jar包制作
 

1.将多个类封装到了一个包(package)中。

2.定义一个jar包的配置信息。

定义一个文件a.txt 。文件内容内容为:

Main-Class:(空格)包名.类名(回车)

3.打jar包。

jar -cvfm my.jar a.txt 包名

4.通过winrar程序进行验证,查看该jar的配置文件中是否有自定义的配置信息。
 

5.通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序。

jdk\bin\javaw.exe -jarjar -cvf 名称 配置信息 报名  例:jar -cvf my.jar 1.txt mymenu

注意:必须本地注册过jar才能打开jar文件。

 
第三部分 综合练习
 
一.创建一个有菜单的窗口,向文本框中输入文本,菜单中具备打开,保存,退出功能。



源代码:

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
 
public class MyMenuTest
{
//设置基本组件
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem;
 
private FileDialog openDia,saveDia;
 
private File file;

//构造方法启动图形化界面
MyMenuTest()
{
init();
}

//建立方法
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,650,600);
 
bar = new MenuBar();
 
ta = new TextArea();
 
fileMenu = new Menu("文件");

openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");

fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
 
f.setMenuBar(bar);
 
 
openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
 
 
f.add(ta);
myEvent();
 
f.setVisible(true);
 
 
}

//设置事件监听器
private void myEvent()
{

//设置保存菜单项事件
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true);
 
String dirPath = saveDia.getDirectory();
String fileName = saveDia.getFile();
if(dirPath==null || fileName==null)
return ;
file = new File(dirPath,fileName);
}
try
{
BufferedWriter bufw  = new BufferedWriter(new FileWriter(file));
String text = ta.getText();
bufw.write(text);
//bufw.flush();
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException();
}
}
});
 
 //设置打开菜单项事件
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath = openDia.getDirectory();
String fileName = openDia.getFile();

//System.out.println(dirPath+"..."+fileName);
if(dirPath==null || fileName==null)
return ;
 
ta.setText("");
file = new File(dirPath,fileName);
try
{
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});
 
//设置关闭菜单项事件
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
//设置窗口事件(关闭窗口)
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}

public static void main(String[] args) 
{
new MyMenuTest();
}
}
 

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员 java