JAVA基础-GUI


1、概述

(1)GUI:图形用户接口(GraphicalUser Interface),即用图形的方式,来显示计算机的界面,这样更方便更直观。

(2)JAVA中为GUI提供的对象都在java.Awt和javax.Swing两个包中

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

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

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

2、布局管理器

(1)容器中的组件的排放方式就是布局。

(2)常见的布局管理器:

-FlowLayout(流式布局管理器):组件按从左到右的顺序排列,这是Panel组件默认的布局管理器

-BorderLayout(边界布局管理器):组件按东、南、西、北、中的位置排放,默认放置在中。

(3)GridLayout(网格布局管理器):组件按规则的矩阵排放。

(4)GridBagLayout(网格包布避管理器):组件按非规则的矩阵排放。

3、 Component类

(1)Component类是一个抽象类,是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类,是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。

4、Container类

(1)Container类是Component类的一个子类,是一个可包含其他 AWT 组件的容器。

(2)add方法:该方法可以将指定组件追加到Container容器的尾部。

5、Frame类

(1)Frame是带有标题和边框的顶层窗口。其默认布局为BorderLayout。

(2)方法:

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

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

-void setVisible(Booleanb):根据参数 b 的值显示或隐藏此组件。

-void setSize(intwid,int hei):调整组件的大小,使其宽度为wid,高度为 hei,单位是像素。

-void setLocation(intx,int y):通过此组件父级坐标空间中的xy 参数来指定新位置的左上角。

-voidsetLayout(LayoutManager mgr):设置此容器的布局管理器。

-voidsetTitle(String title):此窗体的标题设置为指定的字符串。

(3)创建图形化界面步骤:

-创建frame窗体。

-对窗体进行基本设置,如大小,位置,布局。

-定义组件。

-将组件通过窗体的add方法添加到窗体中。

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

(4)示例:

import java.awt.*;

public class AwtDemo

{

     public static void main(String[] args)

     {

              //创建一个窗体

              Frame f=new Frame("myframe");

              //设置窗体的大小

              f.setSize(500,400);

              //调整窗体的位置

              f.setLocation(300,200);

              //设置窗体的布局管理器

              f.setLayout(new FlowLayout());

              //创建一个按钮

              Button b=new Button("mybutton");

              //将按钮添加到窗体中

              f.add(b);

              //设置窗体为可见

              f.setVisible(true);

     }

}

6、事件监听机制

(1)事件监听机制组成:

-事件源(组件):即awt包或swing包中的好运些图形界面组件。

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

-监听器(Listener):将可以触发某一个事件的动作都已经封装到了监听器中。

-事件处理:引发事件后处理方式。

事件源、事件和监听器在JAVA中都已经定义好了,直接获取其对象来用就可以了,我们要做的就是对产生的动作进行处理。

(2)事件监听机制流程图


用户对组件的操作就是一个事件,那么产生事件的组件就是事件源,接收并处理事件,与用户进行交互的行为就是事件处理器,这些处理方式都封装在监听器中。

7、窗体事件

(1)要处理窗体事件需要添加窗口监听器以监听窗口事件,可以通过addWindowListener(WindowListener l)方法添加一个窗口监听器。

(2)WindowListener:是一个接口,用于接收窗口事件的侦听器。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类WindowAdapter(仅重写所需的方法)。

(3)WindowAdapter:是一个抽象类,是接收窗口事件的抽象适配器类,该类实现WindowListener接口,并覆盖了该接口的所有方法,且将方法覆盖为空。此类存在的目的是方便创建侦听器对象。扩展此类可创建WindowEvent 侦听器并为所需事件重写该方法。所在在创建窗口监听器时不需要去实现WindowListener接口且覆盖该接口的所有方法,只需继承WindowAdapter类并复写其中所需要的方法即可。

(4)示例,当点击窗口关闭按钮时关闭窗口

import java.awt.*;

import java.awt.event.*;

public class AwtDemo2

{

     public static void main(String[] args)

     {

              //创建一个窗体

              Frame f=new Frame("myframe");

              //设置窗体的大小

              f.setSize(500,400);

              //调整窗体的位置

              f.setLocation(300,200);

              //设置窗体的布局管理器

              f.setLayout(new FlowLayout());

                     //添加窗口监听器,参数是一个WindowAdapter的子类对象,此处采用匿

//名内部类的形式

              //此匿名内部类中只复写了WindowAdapterwindowClosing方法

              f.addWindowListener(newWindowAdapter()

              {

                        public voidwindowClosing(WindowEvent e)

                        {

                                 System.exit(0);

                        }

              });

              //设置窗体为可见

              f.setVisible(true);

     }

}

8、Action事件

(1)处理Action事件需要添加一个ActionListener监听器。添加ActionListener监听器可以用组件的addActionListener(ActionListenerl)方法。

(2)ActionListener:一个接口,用于接收操作事件的侦听器接口,对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed 方法。

(3)actionPerformed(ActionEvent e) 方法:是ActionListener的一个方法。在发生操作时调用。

(4)示例:当点击按钮时退出窗口

importjava.awt.*;

importjava.awt.event.*;

public classFrameDemo

{

         //定义组件引用

         private Frame f;

         private Button b;

         //定义构造函数对窗体进行初始化

         public FrameDemo()

         {

                   init();

         }

         public void init()

         {

                   //创建组件实例

                   f=new Frame("myframe");

                   b=newButton("button");

                   //设置窗体的大小

                   f.setSize(500,400);

                   //调整窗体的位置

                   f.setLocation(300,200);

                   //设置窗体的布局管理器

                   f.setLayout(newFlowLayout());

                   //将按钮添加到窗体中

                   f.add(b);

                   //设置窗体为可见

                   f.setVisible(true);

                   //button组件添加Action事件监听器

                   b.addActionListener(newActionListener()

                   {

                            public voidactionPerformed(ActionEvent e)

                            {

                                     System.exit(0);

                            }

                   });

         }

         public static void main(String[] args)

         {

                   //创建窗体

                   new FrameDemo();

         }

}

9、鼠标事件

(1)处理鼠标事件需添加MouseListener监听器,可以通过Component组件的addMouseListener(MouseListenerl)方法添加。

(2)MouseListener:是一个接口,用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类MouseAdapter(仅重写所需的方法)。

(3)MouseAdapter接收鼠标事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。扩展此类可创建MouseEvent(包括拖动和移动事件)或/和MouseWheelEvent 侦听器,并针对所需事件重写方法。

(4)示例:当鼠标光标进入到button按钮时打印信息

importjava.awt.*;

importjava.awt.event.*;

public classFrameDemo2

{

         private Frame f;

         private Button b;

         public FrameDemo2()

         {

                   init();

         }

         public void init()

         {

                   //创建组件并设置属性

                   f=new Frame("myframe");

                   b=newButton("button");

                   f.setSize(500,400);

                   f.setLocation(300,200);

                   f.setLayout(newFlowLayout());

                   f.add(b);

                   f.setVisible(true);

                   myEvent();

         }

         public void myEvent()

         {

                   //对窗体添加窗体事件监听器

                   f.addWindowListener(newWindowAdapter()

                   {

                            public voidwindowClosing(WindowEvent e)

                            {

                                     System.exit(0);

                            }

                   });

                   //button组件添加鼠标事件监听器

                   b.addMouseListener(new MouseAdapter()

                   {

                            private int count=1;

                            public voidmouseEntered(MouseEvent e)

                            {

                                     System.out.println("Mouseenter"+count++);

                            }

                   });

         }

         public static void main(String[] args)

         {

                   //创建窗体

                   new FrameDemo2();

         }

}

10、键盘事件

(1)处理键盘事件需添加按键监听器,可以通过Component组件的addKeyListener(KeyListener l)为某个组件方法添加一个按键监听器。

(2)KeyListener:是一个接口,用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象KeyAdapter 类(仅重写有用的方法)。使用组件的addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。

(3)KeyAdapter:是一个抽象类,是接收键盘事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。扩展此类即可创建KeyEvent 侦听器并重写所需事件的方法。

(4)示例:为button组件添加一个键盘监听器,当按下键盘时打印出按下的键盘所对应的字符:

import java.awt.*;

import java.awt.event.*;

public class FrameDemo3

{

         privateFrame f;

         privateButton b;

         publicFrameDemo3()

         {

                   init();

         }

         publicvoid init()

         {

                   //创建组件并设置属性

                   f=newFrame("my frame");

                   b=newButton("button");

                   f.setSize(500,400);

                   f.setLocation(300,200);

                   f.setLayout(newFlowLayout());

                   f.add(b);

                   f.setVisible(true);

                   myEvent();

         }

         publicvoid myEvent()

         {

                   //对窗体添加窗体事件监听器

                   f.addWindowListener(newWindowAdapter()

                   {

                            publicvoid windowClosing(WindowEvent e)

                            {

                                     System.exit(0);

                            }

                   });

                   //对按钮添加键盘监听器

                   b.addKeyListener(newKeyAdapter()

                   {

                            publicvoid keyPressed(KeyEvent e)

                            {

                                     System.out.println(e.getKeyChar());

                            }

                   });

         }

         publicstatic void main(String[] args)

         {

                   //创建窗体

                   newFrameDemo3();

         }

}

11、练习:列出指定目录内容

    import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class FrameDemoTest

{

         //声明组件

         privateFrame f;

         privateTextField tf;

         privateButton b;

         privateTextArea ta;

         publicFrameDemoTest()

         {

                       init();

              }

              public void init()

              {

                   //初始化组件

                       f=new Frame("my frame");

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

                       f.setLayout(new FlowLayout());

                       tf=new TextField(60);

                       b=new Button("turn");

                       ta=new TextArea(25,70);

                   //将组件添加到窗体组件

                       f.add(tf);

                       f.add(b);

                       f.add(ta);

                       myEvent();

                       f.setVisible(true);

              }

     privatevoid myEvent()

     {

              //button组件添加Action事件监听器

              b.addActionListener(newActionListener()

              {

                       publicvoid actionPerformed(ActionEvent e)

                       {

                                 //获取文本框组件的文本内容

                                 StringdirPath=tf.getText();

                                 //根据文本框内容创建文件对象

                                 Filedir=new File(dirPath);

                                 //若文件内容是目录则将目录下的文件名打印在文件区域中

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

                                 {

                                          ta.setText("");

                                          String[]names=dir.list();

                                          for(Stringname:names)

                                          {

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

                                          }

                                 }

                       }

                      

              });

              //添加窗体事件监听器

              f.addWindowListener(newWindowAdapter()

              {

                       public void windowClosing(WindowEvente)

                       {

                                 System.exit(0);

                       }

              });

     }

     publicstatic void main(String[] args)

     {

              //创建窗体

              newFrameDemoTest();

     }

}

程序运行结果:


12、Dialog

(1)Dialog 是一个带标题和边界的顶层窗口。Dialog 的默认布局为BorderLayout

(2)示例:点击窗体的按钮时弹出Dialog窗口

import java.awt.*;

import java.awt.event.*;

public class FrameDemo4

{

  //声明组件

  private Framef;

  private Dialogd;

  private Buttonbut;

  private ButtonOKbut;

  private Labell;

  publicFrameDemo4()

  {

     init();

  }

  public voidinit()

  {

     //初始化窗体组件

     f=newFrame("my frame");

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

     f.setLayout(newFlowLayout());

     //初始化Dialog组件

     d=newDialog(f,"info",true);

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

     d.setLayout(newFlowLayout());

     //初始化Label组件

     l=newLabel();

     but=newButton("button");

     f.add(but);

     OKbut=newButton("OK");

     //将Label和Button组件添加到Dialog组件

     d.add(l);

     d.add(OKbut);

     myEvent();

     f.setVisible(true);

    

  }

  private voidmyEvent()

  {

     //添加Dialog组件窗口事件监听器

     d.addWindowListener(newWindowAdapter()

     {

         publicvoid windowClosing(WindowEvent e)

         {

            d.setVisible(false);

         }

     });

     //添加but组件Action事件监听器

     but.addActionListener(newActionListener()

     {

         publicvoid actionPerformed(ActionEvent e)

         {

            l.setText("thisis a Dialog");

            d.setVisible(true);

         }

        

     });

     //添加OKbut组件Action监听器

     OKbut.addActionListener(newActionListener()

     {

         publicvoid actionPerformed(ActionEvent e)

         {

            d.setVisible(false);

         }

        

     });

     //添加Frame组件窗体事件监听器

     f.addWindowListener(newWindowAdapter()

     {

         publicvoid windowClosing(WindowEvent e)

         {

            System.exit(0);

         }

     });

  }

  public staticvoid main(String[] args)

  {

     newFrameDemo4();

  }

}

程序运行结果:


13、菜单

(1)MenuBar:MenuBar 类封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与Frame 对象关联,可以调用该框架的setMenuBar 方法。

(2)Menu:Menu 对象是从菜单栏部署的下拉式菜单组件。

(3)MenuItem菜单中的所有项必须属于类MenuItem 或其子类之一。

(4)示例:

importjava.awt.*;

importjava.awt.event.*;

public classMenuDemo

{

        private Frame f;

        //添加菜单栏组件

        private MenuBar mb;

        //添加菜单组件

        private Menu m,subMenu;

        //添加菜单条组件

        private MenuItem closeItem,subItem;

        public MenuDemo()

        {

                 init();

        }

        public void init()

        {

                 //初始化组件

                 f=new Frame("myframe");

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

                 f.setLayout(new FlowLayout());

                 mb=new MenuBar();

                 m=new Menu("file");

                 subMenu=newMenu("submenu");

                 subItem=newMenuItem("subItem");

                 closeItem=newMenuItem("exit");

                 subMenu.add(subItem);

                 //将菜单条添加到菜单中

                 m.add(subMenu);

                 m.add(closeItem);

                 //将菜单添加到菜单栏中

                 mb.add(m);

                 //将菜单栏与Frame组件关联

                 f.setMenuBar(mb);

                 myEvent();

                 f.setVisible(true);

        }

        private void myEvent()

        {

                 f.addWindowListener(newWindowAdapter()

                 {

                           public voidwindowClosing(WindowEvent e)

                           {

                                    System.exit(0);

                           }

                 });

        }

        public static void main(String[] args)

        {

                 new MenuDemo();

        }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值