GUI---图形编程基础

来源:互联网 发布:斑马标签打印机软件 编辑:程序博客网 时间:2024/05/27 00:45
 ------- android培训、java培训、期待与您交流! ----------

GUI—Java 图形用户接口

1:概念:java针对用户图形化操作提供的服务,封装了命令操作系统。

2:两个包:java.awt.*:早期提供的包,和系统关联较强,跨平台性不够好;

         Java.swing.*:纯java编写的扩展包,移植性强

3:GUI体系结构:

                            容器组件:是可以存储基本组件和容器组件的组件。

                            基本组件:是可以使用的组件,但是必须依赖容器。

组件:就是不同图形容器的对象

体系图如下:

4:使用方法:

1,  当作集合来使用,因为基本组件依赖容器组件,容器组件的方法和集合操作元素类似

代码演示:

public classGUI {

   public static void main(String[] args) {

      //定义右边界的窗体

      Framef = newFrame("hello GUI");

      //设定窗体的大小以及在屏幕的位置

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

      //设置窗体组件中基本组件的布局方式

      f.setLayout(new FlowLayout());

      //创建按钮,基本组件

      Buttonbutton =newButton("我是一个按钮");

      //同设置窗体的方法一样

      button.setSize(20,30);

      //将按钮添加到窗体中

      f.add(button);

     

      //这个监听器就是在时时观看有没有相关的方法,动作发生在这个上面,有,则调用对应的方法;

      button.addMouseListener(new MouseAdapter() {

         @Override

         public void mouseClicked(MouseEvente) {

            //对话框

            final Frame fdg=new  Frame();

            Labelt=newLabel("哈哈,我是对话框");

            Dialogdg=newDialog(fdg,"点错了");

            dg.add(t);

            dg.setBounds(500,400, 100, 100);

            dg.setVisible(true);

            dg.addWindowListener(new WindowAdapter(){

                @Override

                publicvoidwindowClosing(WindowEvent e) {

                   e.getWindow().dispose();

                   //不关这个引用,jvm不会退出的,局部内部类访问局部变量,要用final修饰

                   fdg.dispose();

                }

               

            });

         }

      });

      //事件监听机制

      f.addWindowListener(new WindowAdapter() {

         @Override

         public voidwindowClosing(WindowEvent arg0) {

            //面向对象的思想,让窗体关闭,必须要得到窗体,调用关闭(释放资源)

            arg0.getWindow().dispose();

         }

      });

      //显示这个窗体

      f.setVisible(true);

   }

 

}

运行效果就不演示了

5针对以上重要,也是我觉得GUI最重要的地方在于

5.1事件监听机制

         事件源:事件发生的场所,通常就是各个组件,按钮,窗口,菜单等

         事件对象:封装了一个在时间源上发生的一个用户的操作,通常在时间监听器中获取这个对象用来判断用户的操作信息;

         监听器:负责监听各个事件源发生的事件,并对事件做出处理,我们写处理,不同的监听器封装了不同的事件对象因此,也就有了不同的处理过程

@好奇:这个监听器是如何知道用户发生了一次操作呢,通过差API发现,时间监听器的根接口是一个标记接口EventListener,我想底层应该是jvm做了特殊处理,知道了事件源上发生了一次操作,就是序列话接口是一个标记接口一样;

使用:在事件源添加事件监听器的实现类(通常我们用匿名内部类类写),将事件源和事件对象联系起来

5.2适配器模式:

         1一个监听器中封装了好多对事件处理的方法,但是通常我们只需要其中的一两个方法来处理,所以在实现类和借口之间多了一个抽象类,但是这其中的方法不是抽象的,对监听器做了一个空实现,我们只要实现这个适配器类来重写其中一两个我们想要方法,就可以了,不会让代码看起来那么臃肿;比如

WindowLinstener监听器中有这么多的方法:

void

windowActivated(WindowEvent e)
          将 Window 设置为活动 Window 时调用。

 void

windowClosed(WindowEvent e)
          因对窗口调用 dispose 而将其关闭时调用。

 void

windowClosing(WindowEvent e)
          用户试图从窗口的系统菜单中关闭窗口时调用。

 void

windowDeactivated(WindowEvent e)
          当 Window 不再是活动 Window 时调用。

 void

windowDeiconified(WindowEvent e)
          窗口从最小化状态变为正常状态时调用。

 void

windowIconified(WindowEvent e)
          窗口从正常状态变为最小化状态时调用。

 void

windowOpened(WindowEvent e)
          窗口首次变为可见时调用。

适配器抽象类:public abstract class WindowAdapter

对上面的接口做了一个空的实现,因为是空实现,所以将适配器些微抽象类,不能实例对象,因为无意义,这样我们就可以使用这个中间类类创建对象,使用方法了,让程序看的不那么臃肿;

图解:

3资源释放:

因为所有的GUI对象在创建出来时,先是在内存中处在,调用显示属性的方法才会显示,党有容器嵌套时,我们要关闭资源时要注意了,像刚刚在对话框中就的关闭他说应用的窗体类

0 0