GUI


 

图形化界面编程:

其实所有的与电脑相关的操作都是编程操作,即人与电脑交互的方式体现的过程就是在编程;

主要的不同就是看封装了多少;封装的越多,操作起来就越简单,封装的越少,操作就越麻烦;没有封装的,图形化编程就做不了;

 

GUI  图形化界面

Graphical User Interface  图形用户接口  即Java提供的针对于图形化界面的公共组件;

操作更加方便直接;

 

CLI 命令行 

Command Line User Interface 命令行用户接口;

这就需要记忆住很多的操作命令;

 

Java为GUI提供的对象都存在java.awt包和javax.swing包当中;

 

java.awt 这个包里面的特点都需要调用本地系统方法实现功能,即比较依赖于平台,在不同的平台下的图形会略有差异,属于重量级的控件;

java.swing 这个包是在awt的基础上,建立的一套界面系统,提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级的控件;

所以以后升级就升级swing包;

 

eclipse工具是纯java编写的,它是用swt界面的安装包编写的,是IBM的eclipse小组独立编写的图形化界面包;

1、swing的基本体系构成:

Component组件、构件;

Label是用来封装文字的组件对象,当文字不能放在组件上面,就用Label组件完成;

Window 窗体,窗口,

Frame 视窗,Panel面板

 

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

 

使用的时候,都是创建的Frame的示例对象;

 

2、布局管理器

容器中的组件的排放方式,就是布局;

常见的布局管理器(布局对象)

玩图像界面,最麻烦的就是布局上;

组件默认都是居中的位置的;

(1)FlowLayout流式布局 

(2)BorderLayout边界式布局,要先指定方向,否则就居中;即全部居中覆盖全部填充;

(3)GridLayout网格式布局

(4)GridBayLayout网格包式布局

(5)CardLayout卡片式布局

(6)坐标式布局,想放哪个位置就放哪里;

 

 

 

需要哪个布局管理器,就new哪个对象即可;

功能实现是比较简单的,最麻烦的就是图像化界面

一般图像化界面开发,最好使用高级编辑器如ecslipe等,里面都有画布,这样就方便多了;

 

面板panel的特点,可以将frame视窗进行分割;

 

3、awt包中的对象;

父类Component  里面超多方法;

子类 Container  容器组件

Component add(Component comp, intindex) 

其实该类的底层是封装了集合对象,所以有脚标用来添加其他的组件对象

 

Frame对象  一般用该类实例化对象进行图像化界面操作;

原则依然是用父类方法,new子类实例

 

Frame实例化:

Frame() 构造一个最初不可见的 Frame 新实例()。

Frame(String title) 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。

setVisible(boolean); 根据参数 b 的值显示或隐藏此组件。Component的方法;

 

主线程虽然结束了,但jvm程序还在运行没有结束,说明还有另外的前台线程在运行;

其实图形化界面是由另外线程在控制的,只要开启图像化界面就会多了一个线程;

设置视窗大小:setSize(int,int);横坐标,纵坐标

设置视窗相对位置:setLocation(int,int); 默认是左上角;

 

添加组件:

添加按钮:实例Button对象即可;

Button() 构造一个标签字符串为空的按钮。

Button(String label)  构造一个带指定标签的按钮。

Frame对象具备一个默认的布局管理器,叫做边界式布局;如果不指定位置就会居中全部填充;

设置布局管理:setLayout(LayoutManager mgr)

 

总结

创建图形化界面步骤:

(1)、创建Frame窗体;

(2)、对窗体进行基本设置,比如大小,位置,布局;

(3)、定义组件;

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

(5)、让窗体显示,通过setVisible(true);

 

4、事件监听机制:

 

事件监听机制的特点:

(1)事件源(2)事件(3)监听器(4)事件处理;

 

事件源:就是awt包或者swing包中的那些图形界面组件;

事件:每一个事件源都有自己特有的对应事件和共性事件;

监听器:将可以出发某一个事件的动作(不只一个动作)都已经封装到了监听器中;

 

以上三者,在java中都已经定义好了,直接获取其对象就可以了,我们只需要对产生的动作进行处理即可;

 

监听器里面定义的都是动作;

 

抽象类java.awt.event.WindowAdapter中一个抽象方法都没有,目的就是为了不让实例化对象;

 

因为WindowListener的子类WindowAdapter已经实现了该接口,并覆盖了其中所有的方法,那么我们只需要继承子WindowAdapter覆盖我们需要的方法即可;

适配器的出现就是为了方便调用监听器对象;

 

常见动作:都可以使用匿名内部类来完成;

windowClosing(WindowEvent e)         System.exit(0)  ;           

windowOpened(WindowEvent e)

windowActivated(WindowEvent e)  处于最前端的事件;

 

发现这些动作都是在动作发生时,底层就在动作发生的时候调用了该事件中的处理方法;

这个底层原理不是很明白;

 

为了优化整个程序,在awt程序中,要注意把事件处理和图像化界面分离开编程;

定义一个方法inits()把图像化界面放在这个方法里;

然后在定义一个方法myEvent()把所有的事件监听器都放在这个里面

而主函数时为了测试使用的;

 

setBounds(int ,int,int,int) 把Frame的位置和大小一起设置;

 

 

在添加监听器时,想要知道具备什么样的特有监听器,需要查看该组件对象的功能;

 

Frame addWindowListener(WindowListener) WindowsEvent

Button addActionListener(ActionListener) 按钮被活动

                            voidactionPerformed(ActionEvent e),

鼠标和键盘都可以使按钮活动;

         ActionListener是少数几个没有子接口适配器的,因为他里的方法非常少,所以没必要;

一般超过三个方法的监听器接口,都是有实现类的;

 

共性的事情——在Component类中的监听器;

鼠标和键盘事件:

addMouseListener(MouseListener)  MouseEvent

传入的监听器有多个方法,所以其有实现的适配器类

 

MouseEvent 中的getClickCount()获取鼠标单击次数;

 

addKeyListener(KeyListener)  KeyEvent

 

在java.awt.event包中,除了监听器就是事件对象;

 

KeyEvent 中的方法getKeyChar()  方法getKeyCode()  静态方法getKeyText();

组合键isControlDown();

TextFiled类,只有一列;

consume(),让键盘事件不按默认的方式产生输入源代码来处理该事件;

 

按钮上面显示有虚线框,那么就表示该按钮就是当前事件源;

 

练习:

在文本框中输入目录,点击赚到按钮,将该目录中的文件与文件夹名称列在下面的文本区域中;

 

在做图形化界面中,首先画的第一步都是界面;画完之后再加事件;

 

可以用继承Frame类的方法来画界面;

 

把画界面的组件都封装到一个方法里面,后面如果有需要可以进行覆盖;

 

TextFiled 文本框,只有列

TextArea 文本区域,

setVisible()可视化一般放在最后;

主函数一般时用来测试使用的;

 

getText()

TextComponent的方法setText()   将文本数据添加到组件中;set的方法都是覆盖;

TextArea的方法 append(String) 追加文本;在文本后面追加;

 

事件,监听机制;这就是上面图形化界面最基本的动作和功能;

 

5、错误处理方式;

用对话框进行处理;

Dialog也是一个窗体; 默认时是还可以操作后面的窗体的;要设置为true才行;

对话框一般不单独存在,一般是发生了一些事情后才跳出来;所以对话框要依赖于窗体;

一般的,优化程序,只有当错误产生了才出现对话框,这样节约内存;

对话框一般两个组件,文字和按钮;

只有Lable对象才能封装文本,其他组件时不能封装文本的;

窗体定义完之后,只有setVisible(true)才能显示;其实窗体都是在内存中一直都有的,只是没有显示;当不显示时,该窗口就不存在图形化了,所以操作就没效,因为不可见就没有操作反应;

 

这个窗体也是默认的流式布局;

 

图像化界面需要new的对象非常多,所以一般运行会有点小慢;

 

6、菜单

MenuBar 菜单栏

Menu 为菜单

MenuItem 菜单项;

add()

addActionListener(ActionListener l)

 

练习:打开保存对话框;

FileDialog 两个模式FileDialog.LOAD 或 FileDialog.SAVE  默认的模式是load模式;

默认布局就是边界布局,即全部填充;

 

7、jar命令;

jar –cvf jar包的名称,包名;

配置清单信息;

Main-Class:写上主类名称的固定格式,前面要加一个空格,别忘了后面要加一个回车;

空格和回车必须都要有;

 

可执行文件要配置注册文件;

 

 

 

javass:

 

组件放在panel上,panel放在Frame上,最后设置显示;

 

setLayOut(null);不要默认的布局;

 

字体,大小,颜色,位置,组件主要的属性;

 

类Canvas画布, paint方法;

Canvas其实也是一个组件;一般用子类继承,重写里面的paint方法;

 

注意,所有的组件必须要添加到Frame容器组件中才可以显示得出来;

Window类的方法 pack()和setVisible()效果一样,即显示功能;;

 

获取组件的大小设置值getInsets()

 

滚动条组件ScrollPane类,放在panel里面的;

 

画Panel的基本构成

(1)需要出现在界面上的组件的定义;

(2)界面初始化的方法;

(3)界面事件处理的方法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值