黑马程序员——Java基础---GUI

来源:互联网 发布:mac新建文件夹 编辑:程序博客网 时间:2024/06/01 03:57

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

概述

1、GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。

2、计算机与用户交互的两种方式:GUI和CLI

        GUI: Graphical User Interface,图像化界面交互,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。

        CLI: Command LineUser Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观。

3、java.Awt包和javax.Swing包。

        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,说明对平台有一定的依赖性,跨平台性较弱,属重量级控件。

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

 

继承关系图

 

Button 按钮   textcomponen 文本组件,包括文本框与文本区域

label  标签  作用:用于封装文字 checkbox  复选框

window 窗口 panel 面板

frame框架 dialog  对话框

filedialog 文件对话框  负责文件的选取和保存

Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

Container常用子类:Window   Panel(面板,不能单独存在。)

Window常用子类:Frame  Dialog

 

布局管理器

1、布局:容器中的组件排列方式

2、常见的布局管理器:

        1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器,控件默认居中,但是可以设置。

 

        2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。若没有指定组件的东南西北的话,组件就会以最大面积填充窗体,因为组件是默认居中的,添加新组件就会被覆盖如果窗体中只有一个组件,将会覆盖整个窗体。

 

        3)GridLayout:网格式布局管理器,规则的矩阵

 

        4)CardLayout:卡片式布局管理器,即选项卡

 

        5)GridBayLayout:网格包布局管理器,非规则矩阵

3、如果存在多种布局方式,如何创建窗体界面呢?步骤:

        1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel

        2)将组件加入Panel,设置面板的布局管理器。

 

简单的窗体创建过程

1、创建Frame窗体:

        Frame f = new Frame("my Frame");//可设置标题,即窗体名字

2、对窗体进行基本设置:如大小,位置,布局等:

        f.setSize(int wight,int hight);//窗体大小设置

        f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标

        f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置

        f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout

3、定义组件:

       Button b = new Button(“my Button”);//可设置组件的名称

4、将组件通过窗体的add方法添加到窗体中:

        f.add(b);//将按钮组件添加进窗体

5、让窗体显示:

        f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体

演示用例:

import java.awt.*;

class AwtDemo{

public static void main(String[] args){

Frame f = new Frame("my awt");//创建窗体,默认边界式布局

//基本设置,长和宽,第一个为横坐标,第二位为纵坐标

f.setSize(500400);

//设置本地位置,窗口弹出位置

f.setLocation(300,200);

//设置布局管理

f.setLayout(new FlowLayout());

//设置按钮

Button b = new Button("");

//加入窗体

f.add(b);

f.setVisible(true);//

System.out.ptintln("Hello World!");

 

}

}

事件监听机制

用户对组件的操作,就是一个事件,那么产生事件的组件就是事件源。

接收并处理事件,与用户进行交互的行为就是事件处理器。这些处理方式都封装在监听器中

 

就如同开密码锁,为了安全,密码锁上安装了报警装置,只要锁被砸就会把锁事件通知保安

那么保安就有相应的处理方式

如果锁没有被砸,而是密码输入错误,那么报警装置也会将锁事件通知保安,保安也会处理方式

 

那么锁就是事件源,报警装置就是监听器,可以用来监听引发事件的动作。但必须要注册到锁上,否则锁被砸保安就不知道

对于每一种动作都有不同的处理方式

 

 

 

        1)事件源(组件):awt或swing包中的那些图形界面组件

        2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件

        3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。

        4)事件处理:引发事件后的处理方式。

  ddWindowListener(WindowLisener l)

添加指定的窗口侦听器,以此窗口就收窗口事件

 

WindowLisener接口,用于接收窗口事件的侦测器窗口,常用方法如下:

windowActivated(WindowEvent e)

Window设置为活动Window时调用

windowClosed(WindowEvent e)

因对窗体调用dispose而将其关闭时调用

windowClosing(WindowEvent e)

用户试图从窗口的系统菜单中关闭窗口时调用

windowDeactivated(WindowEvent e)

Window不再是活动Window时调用

windowDeiconified(WindowEvent e)

窗口从最小化状态变成正常状态时调用

windowIconified(WindowEvent e)

窗口从正常状态变为最小化状态时调用

windowOpened(WindowEvent e)

窗口首次变为可见时调用 

java.awt.event包中的WindowAdapter实现了WindowLisener接口,并复写了其中说有方法。接收窗口事件的抽象适配器类。此类中的方法为空。复写,但没复写内容此类存在的目的是方便创建侦听器对象。

使用说明

        组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。

步骤:

1、创建Frame窗体,一般在没有设置布局时,会默认使用边界式布局

rame f = new Frame("");

2、对窗体进行基本设置

比如大小、位置、布局等

f.setSize(横坐标,纵坐标);

3、定义组件

Button b = new Button("");

4、将组件通过窗体的add方法添加到窗体中

f.add(b);

5、让窗体显示,通过setVisible(true)来完成

f.setVisible(true);

演示用例:

import java.awt.*;

class AwtDemo{

public static void main(String[] args){

Frame f = new Frame("my awt");//创建窗体,默认边界式布局

//基本设置,长和宽,第一个为横坐标,第二位为纵坐标

f.setSize(500400);

//设置本地位置,窗口弹出位置

f.setLocation(300,200);

//设置布局管理

f.setLayout(new FlowLayout());

//设置按钮

Button b = new Button("确定");

//加入窗体

f.add(b);

//关闭窗体

//f.addWindowListener(new MyWin())

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("打开");

}

});

f.setVisible(true);//

System.out.ptintln("Hello World!");

}

}

class MyWin extends WindowAdapter{

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

/* 

需求:让窗体的关闭功能实现

       让按钮也具备退出程序的功能 

*/ 

import java.awt.*;

import java.awt.event.*;

class FrameDemo{

//定义该图形中所需的组件的引用

private Frame f;

private Button but;

//初始构造函数 

FrameDemo(){

init();

}

//窗体创建与功能实现  

public void init(){

//实例化组件 

f = new Fame("my frame");

 

//frame进行基本设置

f.setBounds(300,100,600,500);

f.setLayout(new FlowLayout());

 

but = new Button("my button");

 

//将组件添加到frame

f.add(but);

 

//加载一下窗体上的事件

myEvent(but);

 

//显示窗体

f.setVisible(true);

 

}

//注册事件 

private void myEvent(){

//窗体的关闭功能  

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

//让按钮具备退出程序的功能

/*

按钮就是事件源。

那么选择哪个监视器呢?

通过关闭窗体事例了解到,想要知道哪个组件具备什么样的特有监听器。

需要查看该组件对象的功能。

按钮支持特有监听addActionListener动态监听

*/

but.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

System.out.println("退出");

System.exit(0);

}

});

}

public static void main(String[] args){

new FrameDemo();

}

}

鼠标活动事件

/*

常用方法:

 void moiuseClicked(MouseEvent e)

鼠标按键在组件上单击(按下并释放)时调用

 void moiuseEntered(MouseEvent e)

鼠标进入到组件上时调用

 void moiuseExited(MouseEvent e)

鼠标离开组件时调用

 void moiusePressed(MouseEvent e)

鼠标按键在组件上按下时调用

 void moiuseReleased(MouseEvent e)

鼠标按钮在组件上释放时调用

*/

import java.awt.*;

import java.awt.event.*;

class MouseEvent{

//定义该图形中所需的组件的引用

private Frame f;

private Button but;

 

MouseEvent(){

init();

}

 

public void init(){

f = new Fame("my frame");

 

//frame进行基本设置

f.setBounds(300,100,600,500);

f.setLayout(new FlowLayout());

 

but = new Button("my button");

 

//将组件添加到frame

f.add(but);

 

//加载一下窗体上的事件

myEvent(but);

 

//显示窗体

f.setVisible(true);

 

}

private void myEvent(){

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

//活动监听

but.addActionListener(new ActionListener(){

public void actionPerformed(ActionListener(){

System.out.println("action ok");

}

});

//判断单击

but.addMouserListener(new MouseAdapter(){

private int count =1;

private int clickCount = 1;

public void mouseEntered(MouseEvent e){

System.out.println("my button"+count++);

}

//点击

public void mouseClicked(MouseEvent e){

System.ou.println("点击动作"+clickCount++);

}

//双击判断

public void mouseClicked(MouseEvent e){

if (e.getClickCount()==2){

System.ou.println("点击动作"+clickCount++);

 

}

}

});

}

class {

public static void main(String[] args){

new MouseEvent();

}

}

键盘活动事件

/*

常用方法:

void keyPressed(KeyEvent e)

按下某个键时调用此方法

void keyReleased(KeyEvent e)

释放某个键

void keyTyped(KeyEvent e)

键入某个键

*/

import java.awt.*;

import java.awt.event.*;

class {

public static void main(String[] args){

}

}

 

class MouseAndKeyEvent{

//定义该图形中所需的组件的引用

private Frame f;

private Button but;

private TextField tf;

 

MouseAndKeyEvent(){

init();

}

 

public void init(){

f = new Fame("my frame");

 

//frame进行基本设置

f.setBounds(300,100,600,500);

f.setLayout(new FlowLayout());

 

but = new Button("my button");

//文本框

tf = new TextField(10);

 

//将组件添加到frame

f.add(but);

f.add(tf);

 

//加载一下窗体上的事件

myEvent(but);

 

//显示窗体

f.setVisible(true);

 

}

private void myEvent(){

//限制文本框中只能输入数字

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+"....是非法的");

e.consume();//不会按照默认的方式处理此方式

}

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

//活动监听

but.addActionListener(new ActionListener(){

public void actionPerformed(ActionListener(){

System.out.println("action ok");

}

});

//but添加一个键盘监听

but.addKeyListener(new KeyAdapter(){

public void keyPressed(KeyEvent e){

//esc结束

if (e.getKeyCode()==KeyEvent.VK_ESCAPE){

System.exit(0);

}

//System.ou.println(e.getKeyChar()+"..."+e.getKeyCode());//键与对应的码值

//System.ou.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());//根据键获取值,可以识别shift等键

}

});

//组合键

but.addKeyListener(new KeyAdapter(){

public void keyPressed(KeyEvent e){

if (e.isControlDown()&&e.getKeyCode()==KeyEvent.VE_ENTER){

System.out.println("ctrl+enter is run");

}

}

});

}

 

应用

对话框:Dialog

        何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的这个对象。

DialogFrame owner,String title, boolean modal)

构造一个最初不可见的Dialog,它带有指定的所以所有者Frame,标题和模式

演示用例:

列出指定目录下的内容,当输入的路径不正确时,给出错误提示信息。

import java.awt.*;

import java.awt.event.*;

import java.io.*;

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("my window");

f.setBounds(300,100,600,500);

f.setLayout(new FlowLayout());

 

tf = new TextField(60);

 

but = new Button("转到");

 

ta = new TextArea(25,70);//25,70

 

d = new Dialog(f,"提升信息-self",true);//模式为true,对话框不操作,窗体操作不了

d.setBounds(400,200,240,150);

lab = new Label();

okBut = new Button("确定");

//添加组件 

d.add(lab);

d.add(okBut);

 

f.add(tf);

f.add(but);

f.add(ta);

//窗体事件 

myEvent();

//窗体显示 

f.setVisible(true);

}

private void myEvent(){

//“跳转”按钮事件 

okBut.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

d.setVisible(false);

}

});

//窗体关闭功能 

d.addWindowListener(new WindowAdapter){

public void windowClosing(WindowEvent e){

d.setVisible(false);

}

});

//回车跳转

tf.addKeyListener(new KeyAdapter(){

public void keyPressed(KeyEvent e){

showDir();

}

});

//按钮跳转

buf.addActionListener(new ActionListener(){

showDir();

}

};)

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

}

private void showDir(){

String dirPath = tf.getText();//返回String类型的文本

File dir = new File(dirPath);//ta.setText(text);//转到

//判断输入的路径是否存在,且是否是文件夹 

if (dir.exists()&&dir.isDirectory()){

tf.setText("");//清空文本区中的内容

String[] names = dir.list();

for (String name:names ){

ta.append(name+"\r\n");

}else{

String info = "您输入的信息:"+dirPath+"是错误的。请重新输入!";

lab.setText(info);

d.setVisible(true);

}

}

        对列出指定目录内容示例的功能增强。


菜单:Menu

1、菜单继承关系

       

2、说明

        1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem

        2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。

        3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。

        4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。

        5)通过setMenuBar()方法,将菜单添加到Frame中。

3、用到方法

MenuBar菜单栏

该框架的setMenuBar方法可以是该菜单栏与Frame对象关联

 

MenuItem  add(MenItem)

将指定的菜单项添加到此菜单

演示用例:

import java.awt.*;  

import java.awt.event.*;  

  

class MyMenuDemo   

{  

    //定义组件引用  

    private Frame f;  

    private MenuBar mb;  

    private Menu m,subMenu;  

    private MenuItem closeItem,subItem;  

    //构造函数  

    MyMenuDemo()  

    {  

        init();  

    }  

//窗体设置与功能实现   

    public void init()  

    {  

        //窗体设置  

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);  

        //窗体上事件  

        myEvent();  

        //窗体显示  

        f.setVisible(true);  

    }  

    private void myEvent()  

    {  

        //关闭菜单具备关闭事件  

        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 MyMenuDemo();  

    }  

}  

 

jar包双击执行

        既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。

步骤如下:

        1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;

        2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件

        3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。

        4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令

        5、此时双击即可执行。

说明:

        1)在固定格式中:

                a、如果无空格:在编译的时候,就会报IO异常,提示无效的头字段,即invalidheader field。这说明1.txt在被IO流读取。

                b、如果无回车:在列表清单.MF中不会加入相应的加载主类的信息,也就是说配置清单的属性主类名称不会加载进清单中,也就不会执行。

        2)jar文件必须在系统中注册,才能运行。注册方法如下:

        A.对于XP系统:

               a.打开任意对话框,在菜单栏点击工具按钮,选择文件夹选项

               b.选择新建--->扩展名,将扩展名设置为jar,确定

               c.选择高级,可更改图标,然后点击新建,命名为open,

               d.在用于可执行应用程序中,点浏览,将jdk下的bin的整个文件路径添加进来,并在路径后添加-jar即可。

        B.对于win7系统:

               a.改变打开方式:右击.jar文件,点击打开方式,选择默认程序为jdk下bin中的javaw.exe应用程序。

               b.修改关联程序的注册表:打开注册表(win+r),找到注册表路径\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右击点修改,在原路径的中添加-jar如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe" -jar "%1",注意-jar两边要有空格,保存。

              c.双击即可执行jar程序,如果仍不能执行,则需下载最新版的jdk。

演示用例:

/* 

练习:利用Menu组件完成一个简单的记事本程序。 

需求:具有文件菜单,文件中有打开,保存和退出功能。将写好的程序变为双击可执行的程序。 

*/  

    

import java.awt.*;  

import java.awt.event.*;  

import java.io.*;  

  

class MyMenuText  

{  

    //定义组件引用  

    private Frame f;  

    private TextArea ta;  

    private MenuBar mb;  

    private Menu fileMe;  

    private MenuItem openMi,saveMi,otherSaveMi,closeMi;  

  

    private FileDialog openDia,saveDia;  

  

    private File file;  

  

    //构造函数  

    MyMenuText()  

    {  

        init();  

    }  

  

    //功能实现  

    private void init()  

    {  

        //组件实例化  

        f=new Frame("MyText");  

        ta=new TextArea();  

          

        mb=new MenuBar();  

        fileMe=new Menu("文件");  

        openMi=new MenuItem("打开");  

        saveMi=new MenuItem("保存");  

        otherSaveMi=new MenuItem("另存为");  

        closeMi=new MenuItem("退出");  

  

        openDia=new FileDialog(f,"选择打开的文件",FileDialog.LOAD);  

        saveDia=new FileDialog(f,"保存到哪里",FileDialog.SAVE);  

  

        //基本设置  

        f.setBounds(300,150,600,500);  

  

        //添加组件  

        f.add(ta);  

        f.setMenuBar(mb);  

  

        mb.add(fileMe);  

        fileMe.add(openMi);  

        fileMe.add(saveMi);  

        fileMe.add(otherSaveMi);  

        fileMe.add(closeMi);  

  

        //窗体中事件  

        myEvent();  

  

        //窗体显示  

        f.setVisible(true);  

    }  

  

    private void myEvent()  

    {  

        //窗体关闭功能  

        f.addWindowListener(new WindowAdapter()  

        {  

            public void windowClosing(WindowEvent e)  

            {  

                System.exit(0);  

            }  

        });  

  

        //打开事件  

        openMi.addActionListener(new ActionListener()  

        {  

            public void actionPerformed(ActionEvent e)  

            {  

                //显示文件对话窗口  

                openDia.setVisible(true);//------------------  

                String dir=openDia.getDirectory();//获取目录  

                String fileName=openDia.getFile();//获取文件名  

                  

                if(dir==null||fileName==null)//对打开了文件对话框,但未做出操作的处理  

                    return;  

          

                file=new File(dir,fileName);//文件对象  

                try  

                {  

                    ta.setText("");//每打开一个文件时,将文本区的内容清空  

                    //带缓冲技术的读取流  

                    BufferedReader br=new BufferedReader(new FileReader(file));  

                    String line=null;//读一行  

                    while ((line=br.readLine())!=null)  

                    {  

                        //添加到文本区域  

                        ta.append(line+"\r\n");  

                    }  

                    br.close();//关流  

                }  

                catch (IOException ie)  

                {  

                    throw new RuntimeException("文件打开失败");  

                }  

            }  

        });  

  

        //保存事件  

        saveMi.addActionListener(new ActionListener()  

        {  

            public void actionPerformed(ActionEvent e)  

            {  

                //如果是第一次保存,则显示文件对话框  

                if(file==null)//-------------  

                {  

                    //显示文件对话框  

                    saveDia.setVisible(true);//----------------------  

                    String dir=saveDia.getDirectory();  

                    String filename=saveDia.getFile();  

                      

                    if(dir==null||filename==null)//--------------------  

                        return;  

  

                    file=new File(dir,filename);  

                      

                }  

                save();//保存文件方法  

            }  

        });  

          

        //另存为事件  

        otherSaveMi.addActionListener(new ActionListener()  

        {  

            public void actionPerformed(ActionEvent e)  

            {  

                //不管是不是第一次保存,都显示文件对话框  

                saveDia.setVisible(true);//----------------------  

                String dir=saveDia.getDirectory();  

                String filename=saveDia.getFile();  

  

                if(dir==null||filename==null)//--------------------  

                    return;  

  

                file=new File(dir,filename);  

  

                save();//保存文件方法  

                //保存时,默认文件对话框位置在打开文件的位置  

                openDia.setFile(file.getName());  

            }  

        });  

  

        //退出事件  

        closeMi.addActionListener(new ActionListener()  

        {  

            public void actionPerformed(ActionEvent e)  

            {  

                System.exit(0);  

            }  

        });  

    }  

      

    //保存文件  

    private void save()  

    {             

        try  

        {  

            //带缓冲区的写入流  

            BufferedWriter bw=new BufferedWriter(new FileWriter(file));  

            //获取文本区域中的内容  

            String text=ta.getText();  

            bw.write(text);//写入文件中  

            bw.close();//关流  

  

        }  

        catch (IOException ie)  

        {  

            throw new RuntimeException("文件保存失败");  

        }  

    }  

  

    public static void main(String[] args)   

    {  

        //程序运行  

        new MyMenuText();  

    }  

}  


-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

 

0 0