黑马程序员--java GUI

来源:互联网 发布:工作软件 编辑:程序博客网 时间:2024/05/20 01:39


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a><a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

 用户图形界面GUI

知识点

一、用户图形界面GUI

二、JavaGUI的支持

三、GUI体系

四、布局管理器:

五、事件监听机制

六、适配器模式Adapter

七、案例:

---------------------------------------------------------------------------------

一、用户图形界面GUI

              Graphical User Interface图形用户接口:

用图形的方式,来显示计算机操作的界面,这样更方便更直观。

二、JavaGUI的支持

       1java.awtAbstract Window ToolKit (抽象窗口工具包)

需要调用本地系统方法实现功能,跟系统关联性较强,属于重量级控件。

       2javax.swing:在AWT的基础上,建立的一套图形界面系统,提供更多的组件,

完全由Java实现。跟系统关联性较弱,增强了移植性,属轻量级控件。

三、GUI体系

图片 

       1Component组件:

其实就是指对一些功能和属性进行封装的对象。简单的说,组件就是对象。

组件分为两大类:

1)容器组件:就是可以存储容器组件和基本组件的组件

              (2)基本组件:就是可以直接显示在容器上的组件

       2Container容器:

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

四、布局管理器:

容器中的组件的排放方式,就是布局。常见的布局管理器:

       (1FlowLayout(流式布局管理器):它是Panel默认的布局管理器。

                     ( 从左到右,从上到下;它是Panel默认的布局管理器。)

       (2BorderLayout(边界布局管理器):它是Frame默认的布局管理器。

                     (东,南,西,北,中;它是Frame默认的布局管理器)

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

       (4GridBagLayout(网格包布局管理器):不规则的矩阵

       (5CardLayout(卡片布局管理器):选项卡

五、事件监听机制

事件监听机制流程图:

图片 

       (1)事件源:发生事件的组件

       (2)事件(Event):可能发生的事情

       (3)事件监听(Listener):对可能发生的事情的多个情况的封装对象。一般是个接口。

       (4)事件处理:针对发生的事情的处理方式

六、适配器模式Adapter

       1、适配器的作用:

将接口中的方法,适配成用户最终想要的方法。如果接口中的方法较多,而有可能只用其中的一个时,就可以在接口和具体的类之间插入一个适配器类,做一次转换即可。而适配器类实现接口,把所有方法全部空实现,具体的类继承适配器类,用哪个方法,就重写哪个。

       2、用法:

1)格式:

// 事件源,添加监听机制,继承适配器

事件源.addXXXLintener(new XXXAdapter(){

                    //处理事件的方式 

public void mouseClikced(XXXEvent e){ }

 })

              (2)代码体现(窗体添加监听机制,通过适配器实现关闭功能):

      new Frame().addWindowListener(new WindowAdapter(){

              public void windowClosing(WindowEvent e) {

                     System.exit(0);  }

              });

           注意:不是每一个事件接口都有对应的适配器类,如果接口中的方法少于三个就不需要。

七、案例:

       1、第一个窗体案例,创建图形化界面:

1)创建frame窗体。

2)设置窗体的属性。

3)让窗体显示,通过setVisible(true)

图片

          代码体现:

                            //1)创建一个最初不可见的窗体对象

                     Frame f = new Frame();

//2)设置窗体的属性。

                            // 设置标题

                     f.setTitle"HelloGUI";

                            // 设置的坐标

                     f.setLocation400, 200;

                            // 设置大小

                     f.setSize400, 300;

                            // 3)设置窗体可见

                     f.setVisibletrue;

注意:用setBounds()方法,可以同时设置窗体的坐标和尺寸

          public void setBounds(int x,int y,int width,int height)

       2、对窗体案例进行关闭(增加监听机制)

              代码体现:

                            // 创建窗体对象,并让窗体可见

                     Frame f = new Frame();

                     f.setVisibletrue;

                            // 设置窗体属性

                     f.setTitle"关闭窗口";

f.setBounds(400,200, 400,300)

 

                     // 找监听,用适配器类改进:只需重写需要的方法(共7种)

                     f.addWindowListenernew WindowAdapter(){

                            public void windowClosingWindowEvent e) {

                                   System.exit0; }

                     };              

3、在窗体添加按钮,并对按钮添加事件

图片 

              需求: 在窗体上添加一个按钮。并对按钮添加一个事件,

                       实现点击按钮,就在控制台输出一句话:201314

步骤:(1)创建窗体对象

                      (2)创建按钮对象

                     (3)把按钮添加到窗体上

                     (4)把窗体显示出来

注意:A若要改变按键位置,需要重新设置窗体布局setLayout方法;

B若要设置按钮尺寸,需把布局设成setLayoutnull)               

              代码体现:

                     // 创建窗体对象

                     Frame f = new Frame();

                     // 设置属性

                     f.setTitle"添加按钮";

                     f.setBounds(400,200, 400,300);

 

                     // 重新设置窗体布局

                     f.setLayoutnew FlowLayout());

                     // 创建按钮对象

                     Button bu = new Button"我是按钮,点一下";

// bu.setSize30, 20;

                     // 把按钮添加到窗体上

                     f.addbu;

 

                     // 添加窗体关闭事件

                     f.addWindowListenernew WindowAdapter() {

                            @Override

                            public void windowClosingWindowEvent e) {

                                   System.exit0;  }

                            };              

                     //对按钮添加事件,作输出

                     bu.addActionListenernew ActionListener() {

                            @Override

                            public void actionPerformedActionEvent e) {

                                   System.out.println"201314";  }

                            };

                     // 把窗体显示出来设置可见

                     f.setVisibletrue;

4、在窗体上添加文本框和文本域

图片 

 

              需求:把文本框的内容转到文本域中

              代码体现:

                     // 创建窗体对象

                     Frame f = new Frame();

 

                     // 设置窗体属性

                     f.setTitle"文本组件";

                     f.setBouds(400, 200, 400, 300);

                     f.setLayoutnew FlowLayout());

 

                     // 创建文本框,按钮,文本域对象

                     // TextFieldint columns

                     final TextField tf = new TextField20;

                     Button bu = new Button"转到";

                     final TextArea ta = new TextArea12, 40;

 

                     // 把文本框,按钮,文本域对象添加到窗体对象上

                     f.addtf;  f.addbu;  f.addta;

 

                     //添加窗体事件

                     f.addWindowListenernew WindowAdapter() {

                            public void windowClosingWindowEvent e) {

                                   System.exit0;  }

                            };              

                     //添加按钮事件

                     bu.addActionListenernew ActionListener() {

                            public void actionPerformedActionEvent e) {

                                   // 获取文本框的值

                                   String text= tf.getText();

                                   // 清空操作

                                   tf.setText"";

 

                                   // 文本域追加数据

                                   ta.appendtext + "\r\n";  }

                            };

                     // 显示窗体

                     f.setVisibletrue;

       5、多级菜单案例

               需求:1个窗体,1个菜单栏,栏上有菜单"文件""文件""打开记事本""退出系统"菜单项,

                        和 "更换标题"菜单, "更换标题包含 "好好学习,恢复标题" 2个菜单项    图片

 

                     //创建并设置窗体

              final Frame f = new Frame();

              f.setTitle("多级菜单");

              f.setBounds(300, 200, 400, 300);

              final String name = f.getTitle();

                     //创建菜单栏,菜单和菜单项

              MenuBar mb = new MenuBar();

              Menu m1 = new Menu("文件");

              Menu m2 = new Menu("更改标题 ");

              final MenuItem mi1 = new MenuItem("好好学习");

              MenuItem mi2 = new MenuItem("恢复标题");

              MenuItem mi3 = new MenuItem("打开记事本");

              MenuItem mi4 = new MenuItem("退出系统");

                     //窗体添加菜单栏,菜单栏添加菜单,菜单添加菜单项

                     m2.add(mi1);

                     m2.add(mi2);

                     m1.add(m2);

                     m1.add(mi3);

                     m1.add(mi4);

                     mb.add(m1); //菜单栏添加菜单

                     f.setMenuBar(mb); //窗体添加菜单栏

                     //为窗体按钮和菜单项,添加关闭事件

              f.addWindowListener(new WindowAdapter() {

                     public void windowClosing(WindowEvent e) {

                            System.exit(0); }

              });

              mi4.addActionListener(new ActionListener() {

                     public void actionPerformed(ActionEvent e) {

                            System.exit(0); }

              });

                     //添加打开记事本事件

              mi3.addActionListener(new ActionListener() {

                     public void actionPerformed(ActionEvent e) {

                            // 打开系统的记事本

                            Runtime r = Runtime.getRuntime();

                            try { r.exec("notepad"); }

                            catch (IOException e1)

                            { e1.printStackTrace(); } }

              });

                     //添加更改标题事件

              mi1.addActionListener(new ActionListener() {

                     public void actionPerformed(ActionEvent e) {

                            f.setTitle(mi1.getLabel()); }

              });

              //添加恢复标题事件

              mi2.addActionListener(new ActionListener() {

                     public void actionPerformed(ActionEvent e) {

                            f.setTitle(name); }

              });

              f.setVisible(true);

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a><a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

0 0
原创粉丝点击