Java基础day22笔记:GUI概述|布局|Frame|事件监听机制|窗体事件|action事件|鼠标事件|键盘事件|列出指定目录内容|对话框Dialog|菜单|打开文件|保存文件|jar包双击执行

    01-GUI(概述)

        终于要学图形用户界面啦,啦啦啦φ(≧ω≦*)♪

        我们有两种和用户交互的方式,一种是命令行(这节课之前我们一直用的方式),另一种就是图形用户界面。

        Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

        这两个包有什么区别呢?

        java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属重量级控件。

        但它的缺点是有点依赖平台,跨平台性不太好。所以为了提高跨平台型,Java又为我们提供了另外一个包:

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

        我们以后开发组件一般都是用javax.Swing哦。

        我们都知道,Eclipse是用纯Java编写,但是它用的既不是Awt界面也不是Swing界面,而是Swt界面。这个外观包也是基于Awt的,但是是IBM支持Eclipse的这个小组独立编写的图形化外观包。

        也就是说,现在做图形化界面的有Awt、Swing、Swt,Swt可在官网上下载到。

        在图形化界中,到底提供了哪些组件供我们使用呢?

        来看一下它的组成:

    02-GUI(布局)

        窗体中组件的排放方式,叫做布局

        常见的布局管理器:

        (接下来的课程中为了节省时间,有现成的文字就不手打啦,都直接通过截屏贴过来哦)

        流式布局管理器:

        边界布局管理器:

        在边界布局管理器中,若没有指定组件的方位,则会变成这样。充斥整个画面:

        网格布局管理器:

        网格包布局管理器:

        卡片布局管理器:

          我们需要哪种布局,new这个布局管理器的对象就可以啦。但是做图像界面最痛苦的也在这儿,做之前都要先打个草稿,先把图形化界面用笔画一画,要不然做出来的东西虽然功能都实现了,但是可能会奇丑无比。

        还有一个很腻害的布局方式,就是坐标式,我们想将组件放在哪里就放在哪里。这也是让我们用高级一些的编译器的原因,到时候直接将组件拖拉拽进画面中,代码就自动生成了。当然,我们现在刚开始学还是采取手写代码的方式。

        如果我们一个页面同时需要多种布局方式,只需要给画面中插入多个panel,然后设置每个panel的布局方式就OK啦。

    03-GUI(Frame)

        讲了这么多,接下来我们手写代码来构造图形化界面:

        图形化界面是由另外一个线程控制的,只要开启图形化界面,就会多一个线程。

        我们看到,这个图形化界面好mini哦:

        不过它可以拉大:

        设置它的尺寸,第一个数字是长,第二个数字是宽:

        我们发现,每次窗体出现都是在固定的位置:屏幕的左上角,我们重新设置一下它出现的位置:

        添加一个按钮:

        我们发现按钮充斥了整个窗体。Frame这个窗体在new完对象之后具备一个默认的布局管理器:边界式布局,因为我们没有指定按钮的东南西北,所以如上图所示,它居中填充了。

        我们修改一下界面的布局管理,设置成流式布局:

        总结一下,创建图形化界面的思路:

        其实,创建一个图形化界面并不难,更重点的是实现图形化界面的功能,我们发现,点button并没有什么反应,而且该死的竟然点叉叉都关不掉这个窗体。。。

    04-GUI(事件监听机制)

        想让我们的组件有效果,就要涉及到事件监听机制了。        

        什么叫事件监听机制呢?

        简单点说,创建一个组件,给这个组件搞一些事情,只要这些事情一发生,这个组件就会有一些效果。

        事件监听机制的流程图:

        举个例子,我们安装了一个锁,这个锁一被砸警报器就会响。

        锁就相当于事件源,警报器就相当于监听器,1,将锁和警报器连接起来,就是将监听器注册到事件源。

        砸是外部动作,2,发生了砸这个动作,就是有监听器所监听的动作作用于事件源上。

        这时,3,监听器监听到了砸这个动作,立刻产生了事件。这个事件会被封装成一个对象,这个事件对象中记录了到底是哪个密码锁之类的具体信息,

        4,将事件对象传给事件处理方式。谁在监听这个动作就传给谁。

        传过来之后,这个监听器里面就会有相对应的事件处理方式。

        图示表示锁被砸后的事件:

        事件监听机制包含了这几个部分,而需要我们去做的,就是事件的处理方式这一部分。

        事件监听机制的特点:

    05-GUI(窗体事件)

        接下来我们为我们创建的窗体注册一个监听事件,就要用到addWindowListener这个方法,但是它需要传一个WindowListener类型的参数:

        WindowListener是一个接口,如果实现它,就要复写里面的7个方法,实在太麻烦了,我们只需要用到关闭的动作,这个时候,它有一个子类WindowAdapter已经实现了WindowListener接口,并覆盖了其中的所有方法(虽然它里面的方法都是空的,因为它就是为了被这样使用),那么我们只需要继承WindowAdapter类并且覆盖我们需要用到的方法就好啦。

        OK,我们写一个MyWin的类继承WindowAdapter类:

        这时,将MyWin对象传入addWindowListener方法就好啦:

        注意哦,它们是awt的一个子包event中的对象,所以记得导入这个包哦:

        涉及到事件监听都不要忘记导入这个包哦。

        现在运行,我们一点关闭按钮就触发了窗体事件:

        因为我们复写的方法中只有打印的功能,所以每次点击它只是打印了window closing字符串,窗体并没有关闭。

        我们也可以打印一下打印事件的详细信息:

        点关闭会打印事件所属的信息:

        刚刚只是试一试,下面这句才是正正经经的关闭窗体的语句:

        除了上面这种方法,我们也可以写一个匿名类:

        同样可以实现窗体的关闭。

        除了窗体关闭事件,还有其他两个事件windowActivated和windowOpened也了解一下哦:

    06-GUI(Action事件)

        接下来我们把事件的代码和图形化界面组件的代码分离出来,下面是比较规范的代码示例:

        下面我们添加一个退出按钮,让它具备退出功能:

    07-GUI(鼠标事件)

        鼠标事件和键盘事件,几乎所有的组件都具备,我们在component类中找到这两个方法:

        addMouseListener中传入了一个MouseListener接口型的数据,我们看一下MouseListener这个接口:

        它里面的方法对鼠标事件划分非常细:

        我们试一下鼠标进入事件,直接把上节课的代码拿来用,将新的代码添加进去:

        同理,鼠标点击事件:

        按钮还有一个监听器叫做活动监听,点击按钮后点击事件和活动监听谁会发生呢? 

        后续不点击鼠标,但是用键盘,活动监听就会执行,因为只要按钮被活动着,不管是鼠标还是键盘事件,它都会执行。所以按钮上加事件,尽量加活动监听。但是如果同时也加上Clicked事件,会发现Clicked先执行,鼠标点击事件会比活动监听事件活动得更具体一些。

        双击动作的判断:

        用这个方法,不仅双击动作,三击、四击...十击动作都可以判断。

    08-GUI(键盘事件)

        依然是为but这个按钮添加一个键盘事件。

        KeyListener接口中的方法:

        键盘监听事件:

        但是键盘上的有的按键不只由一个字母组成,而是由许多字母组成,那么用上面的方法就只能获取第一个字符,接下来我们要获取该键的文本,即它的全部字符:

        小功能,键盘按下Esc就结束:

        但是27不好记,我们用它对应的常量值:

        如果我们想监听ctrl+Enter呢?

        在InputEvent类中,有这个方法,判断ctrl键是否被摁下:

        OK, 这样写:

        接下来我们想添加一个文本框,里面只能输数字:

        写在键盘监听中:

    09-GUI(练习-列出指定目录内容)

        先把界面搭出来:        

         搭出来之后,我们发现界面很丑,下面做一些排版调整:

        界面搭好了,接下来做功能,我们确定事件源为but,它同时操作这两个框框。

        我们添加一个action监听,这样鼠标和键盘动作就都可以监听到。

        因为功能涉及到了文件操作,所以头文件中一定要加入io包:

        但是我们发现只显示了一个文件,原因是每次设置都会覆盖。于是我们将设置文本改成追加文本:

        OK了:

    10-GUI(对话框Dialog)

        窗体的功能实现了,但是错误的提示还没有完成,以后这个窗体可能会被封装成一个可执行程序,就可以脱离控制台运行了。 

        依然在之前的基础上添加代码:

        这个对话框很小,拉大之后发现确定按钮覆盖了整个窗体:

        因为dialog默认的布局管理器也是边界布局,所以我们重新设置一下它的尺寸和布局方式:

        把监听事件写好:

        好了,接下来我们需要将错误信息显示在对话框上:

        实现输入后按回车就可以显示目录:

    11-GUI(菜单) 

        关于菜单的对象:

        MenuBar 菜单栏 菜单条。

        MenuBar中有添加菜单(Menu对象)的方法。

        而Menu中又可以添加菜单项(MenuItem对象)。

        Menu本身是MenuItem中的一员/子类:

        话不多说,写代码:

        效果:

        给这个菜单中再添加一个子菜单:

        注意:Menu可以添加MenuItem,也可以添加Menu。

        添加事件监听:

    12-GUI(练习-打开文件)

        依然在之前的代码上做添加和改动,添加/改动的地方用红框框出来了:

        界面搭好了:

        下面我们想做一个打开的效果。

        我们看一下FileDialog对象的方法:

        代码:

        效果:

        下面添加文本显示区域:

        (如果还是用流式布局界面会是下面这样,丑丑的):

        添加的代码,添加文本区域:

        边界布局效果就好看多了:

        事件监听:

        别忘记写上io包哦:

        成功打开了:

    13-GUI(练习-保存文件)

        注意,如果该文件已存在,则点保存不会弹出对话框,如果该文件不存在,则点保存会弹出对话框。

        代码:

        该文件不存在,所以保存时会弹出对话框:

    14-GUI(jar包双击执行)

        我们刚刚写的这个java文件中有好多类:

        类一多就要封装,怎么封装呢?找个包就好了。我们在代码中加入包,并且将类改成public型:

        打个jar包:

        但是发现jar包双击无法打开:

        因为jar包中有很多类,它不知道该找哪个类打开。这时就需要我们告诉jar包哪个是带主函数的类,我们找到它执行就OK。

        jar包中都有配置信息:

        这个文件夹中有配置信息文件:

        下面我们重新开始,删掉刚刚创建的jar包。新建一个txt文件,名字随便起,将配置清单的信息写在这个文件中:

        重新打jar包:

        打完包之后,我们再看配置信息文件,发现我们写的配置信息都写入了这个文件:

        OK,双击jar包,打开了我们写的窗体,并且运行正常:

       另, jar文件必须在本地注册过才能用,一般我们是双击安装的jdk,都会自动注册号,就像下面这样:

        但是如果只是将jdk粘贴进电脑中,就需要我们自己注册。下面我们将它删掉,重新注册一遍:

        OK了,图标变成了小树:

        还有要注意一下配置信息的格式:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • java是面向过程的编程语言:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越...
    Java小辰阅读 3,044评论 0 17
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,367评论 0 17
  • 一、GUI 概述 1、概述: 1、GUI:Graphical User Interface,即图形用户界面,用于计...
    玉圣阅读 5,185评论 0 5
  • 界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成...
    A梦想才让心跳存在阅读 1,036评论 0 4
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,046评论 0 4