天天看点

黑马程序员Java学习日记(7)GUI

 -------<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"  target="blank">android培训</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"  target="blank">java培训</a>、期待与您交流! ----------

1.GUI:Graphical User Interface (图形用户接口)。

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

2.Awt: Abstract Window Toolkit(抽象窗口工具包)。

java.Awt:给我们提供了一个图形化界面的窗口方式,具体的方法都在不同的类

         当中,这个包里面的对象需要调用本地系统方法实现功能,比较依赖

         平台,跨平台性较弱,属重级控件。

javax.Swing:在Awt的基础上,建立了一套图形界面系统,其中提供了更多的组件,全部由java实现,增强了移植性,属轻量级控件。在Swing中,有的类是直接继承了Awt,并且复写了Awt当中的很多方法。

Swing的特点:1、用Swing开发完的组件,在任何系统下显示都一模一样。

                        2、与系统的依赖性较低。

3.Component:

图例:

黑马程序员Java学习日记(7)GUI

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

(1)布局:

   什么是布局:容器中的组件的排序方式就是布局。

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

   1、流式布局管理器:FlowLayout

        它是从左到右的顺序排序,默认的是居中的,如果再有一个组件就自动的添加到它的左边或者右边。它是Panel 默认的布局管理器。

   2、边界布局管理器:BorderLayout

       必须指定方位,就是:东,西,南,北,中。它是Frame的默认的布局管理器。

   3、网格布局管理器:GridLayout

       是一个规则的矩形,比如:计算器占一个格子。

   4、网格包布局管理器:GridBagLayout

        是个非规则的矩形。

   5、卡片布局管理器:CardLayout

       是一个选项卡。

   6、坐标式布局:可以放任意位置。

当我们需要哪一种布局的时候,就创建哪一种布局管理器的对象。

(3)Frame:

创建窗体的步骤:

        1、创建Frame窗体对象。

        2、对窗体进行基本设置,比如说:大小,位置,布局。

        3、定义组件。

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

        5、让窗体显示,通过setviseble(true)方法。

代码例子:

import java.awt.*;

class AwtDemo 

{

     public static void main(String[] args) 

     {

           //创建一个窗体对象。

            Frame f = new Frame();

            //设置窗体的大小。

             f.setSize(500,400);

            //设置窗体的本地位置。

            f.setLocation(300,200);

           //设置窗体的布局。

            f.setLayout(new FlowLayout());

           //定义一个组件。

          Button b =new Button("我是一个按钮");

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

           f.add(b);

         //显示窗体。

          f.setVisible(true);

        }

}

图例:

黑马程序员Java学习日记(7)GUI

发现:窗体中的按钮没有作用,而且窗体可以最小化也可以最大化,但是无法关闭窗体。这是因为我们只做了一个界

           面,但是并没有给界面添加效果。

(4)事件监听机制:

       事件监听机制的组成:

             1、事件源(组件)

             2、事件(Event)

             3、监听器(Listener)

             4、事件处理(引发事件后的处理方式)

事件所对应的动作都封装到了监听器中。

事件监听机制流程图:

黑马程序员Java学习日记(7)GUI

事件源:就是awt包中或者Swing包中的图形化界面组件。

事件:   每一个事件源都有自己特有的对应事件和共性事件,这里的共性事件指的是鼠标事件和键盘事件。     

监听器:将可以触发某一个事件的动作都已经封装到了监听器中。这里的动作不止一个动作。

(5)窗体事件:

代码例子:

import java.awt.*;

import java.awt.event.*;

class FrameDemo1 

{

     public static void main(String[] args) 

    {

          //创建一个窗体对象。

          Frame f = new Frame();

          //设置窗体的大小。

          f.setSize(500,400);

         //设置窗体的本地位置。

         f.setLocation(300,200);

         //设置窗体的布局。

         f.setLayout(new FlowLayout());

         //定义一个组件。

         Button b =new Button("我是一个按钮");

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

         f.add(b);

        //添加监听器。

         f.addWindowListener(new MyWindow());

        //显示窗体。

        f.setVisible(true);

     }

}

class MyWindow extends WindowAdapter

{

    public void windowClosing(WindowEvent e)

    {

        System.out.println("关闭");

        System.exit(0);

    }

    public void windowActivated(WindowEvent e)

    {

       System.out.println("激活");

    }

}

(6)Action事件:

想让按钮具备退出程序的功能,此时按钮就是事件源,那么选择哪个监听器呢?

通过关闭窗体的示例了解到,想要知道那个组件具备什么样的特有监听器,需要查看该组件对象的功能。通过查看Button的描述,发现按钮支持一个特有监听,就是ddActionListener。

代码例子:

import java.awt.*;

import java.awt.event.*;

class FrameDemo2 

{

      private Frame f;

      private Button b;

      FrameDemo2()

      {

           init();

      }

      public void init()

      {

         f = new Frame("my Frame");

         //对Frame进行基本设置。

         f.setSize(500,400);

         f.setLocation(300,200);

         f.setLayout(new FlowLayout());

          //定义一个按钮组件。

          b =new Button("我是一个按钮");

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

          f.add(b);

          //加载一个窗体事件。

          myEvent();

          //显示窗体。

          f.setVisible(true);

       }

       private void myEvent()

      {

         f.addWindowListener(new WindowAdapter()

         { 

              //覆盖关闭窗口的方法,并添加窗口事件。

             public void windowClosing(WindowEvent e)

             {

                 System.exit(0);

             }

         });

             //添加活动监听

           b.addActionListener(new ActionListener()

           {

                 public void actionPerformed(ActionEvent e)

                {

                     System.out.println("点按钮退出");

                     System.exit(0);

                }

           });

     }

     public static void main(String[] args) 

     {

             new FrameDemo2();

      }

  }

(7)鼠标事件:

代码例子:

接上例:

   private void myEvent()

   {

         //活动监听。

       b.addActionListener(new ActionListener()

       {

            public void actionPerformed(ActionEvent e)

           {

               System.out.println("action ok");

               System.exit(0);

           }

     });

           //鼠标监听。

       b.addMouseListener(new MouseAdapter()

      {

             private int count=1;

             private int clickCount=1;

          public void mouseEntered(MouseEvent e)

          {

             System.out.println("鼠标进去该组件"+count++);

           }

          public void mouseClicked(MouseEvent e)

          {

              if(e.getClickCount()==2)

               System.out.println("双击动作"+clickCount++);

           }

     });

 }

(8)键盘事件(Keyevent):

代码例子:

 import java.awt.*;

 import java.awt.event.*;

class FrameDemo3

{

       private Frame f;

       private Button b;

       private TextField tf;

       FrameDemo2()

       {

           init();

       }

       public void init()

       {

           f = new Frame("my Frame");

           //对Frame进行基本设置。

           f.setSize(500,400);

           f.setLocation(300,200);

           f.setLayout(new FlowLayout());

            //定义一个按钮组件。

            b =new Button("my Button");

           //定义一个文本框。

           tf=new TextField(20);

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

           f.add(b);

           f.add(tf);

           //加载一个窗体事件。

           myEvent();

           //显示窗体。

           f.setVisible(true);

      }

      private void myEvent()

      {

          f.addWindowListener(new WindowAdapter()

      { 

          //覆盖关闭窗口的方法,并添加窗口事件。

       public void windowClosing(WindowEvent e)

       {

            System.exit(0);

       }

   });

       //添加活动监听

    b.addActionListener(new ActionListener()

    {

           public void actionPerformed(ActionEvent e)

           {

               System.out.println("action ok");

               System.exit(0);

            }

   });

   b.addKeyListener(new KeyAdapter()

   {

         public void keyPressed(KeyEvent e)

        {

              if(e.getKeyCode()==27)

             System.exit(0);

         }

   });

   //当用到组合键的时候,想按Ctrl+Enter。

    b.addKeyListener(new KeyAdapter()

   {

          public void keyPressed(KeyEvent e)

          {

             if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)

             System.exit(0);

           }

   });

    b.addKeyListener(new KeyAdapter()

   {

         public void keyPressed(KeyEvent e)

        {

           int code=e.getKeyCode();

           if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))

          System.out.println("非法"+code);

        }

     });

  }

    public static void main(String[] args) 

   {

       new FrameDemo2();

     }

  }

图例:

黑马程序员Java学习日记(7)GUI

(9)列出指定目录内容:

代码例子:

import java.awt.*;

import java.awt.event.*;

import java.io.*;

class FrameDemo4 

{

     private Frame f;

     private Button b;

     private TextField tf;

     private TextArea ta;

     FrameDemo4()

     {

          init();

     }

     public void init()

     {

        f = new Frame("my Frame");

        //对Frame进行基本设置。

        f.setSize(600,500);

        f.setLocation(300,100);

        f.setLayout(new FlowLayout());

       //定义一个按钮组件。

       b =new Button("转到");

       //定义一个文本框。

       tf=new TextField(60);

       //定义一个文本区域。

       ta=new TextArea(25,70);

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

       f.add(b);

       f.add(tf);

       f.add(ta);

      //加载一个窗体事件。

       myEvent();

       //显示窗体。

       f.setVisible(true);

     }

    private void myEvent()

    {

       f.addWindowListener(new WindowAdapter()

    { 

          //覆盖关闭窗口的方法,并添加窗口事件。

         public void windowClosing(WindowEvent e)

         {

        System.exit(0);

         }

   });

   //添加活动监听

   b.addActionListener(new ActionListener()

   {

         public void actionPerformed(ActionEvent e)

         {

              String dirPath = tf.getText();

              File dir = new File(dirPath);

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

              {

                   tf.setText("");

                  String[] names =dir.list();

                  for(String name:names)

                  {

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

                   }

              }

         }

   });

}

     public static void main(String[] args) 

    {

        new FrameDemo4();

     }

  }

图例:

黑马程序员Java学习日记(7)GUI
黑马程序员Java学习日记(7)GUI

(10)对话框(Dialog):

在上边的代码中我们实现了显示目录这个功能,但是别不完善,因为如果输入一个不存在的路径,应该有错误提示。

Dialog通常不单独存在,只有发生一些事情才存在,所以Dialog依赖与窗体。

代码例子:

import java.awt.*;

import java.awt.event.*;

import java.io.*;

class FrameDemo5 

{

     private Frame f;

     private Button b;

     private TextField tf;

     private TextArea ta;

     private Label lab;

     private Dialog d;

     private Button but;

     FrameDemo5()

     {

           init();

     }

     public void init()

     {

         f = new Frame("my Frame");

         //对Frame进行基本设置。

         f.setSize(600,500);

        f.setLocation(300,100);

        f.setLayout(new FlowLayout());

       //定义一个按钮组件。

       b =new Button("转到");

       //定义一个文本框。

       tf=new TextField(60);

      //定义一个文本区域。

      ta=new TextArea(25,70);

     d=new Dialog(f,"提示信息-self",true);

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

     d.setLayout(new FlowLayout());

     lab=new Label();

     but=new Button("确定");

     d.add(lab);

     d.add(but);

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

     f.add(b);

     f.add(tf);

     f.add(ta);

     //加载一个窗体事件。

     myEvent();

     //显示窗体。

     f.setVisible(true);

   }

    private void myEvent()

   {

        but.addActionListener(new ActionListener()

        {

           public void actionPerformed(ActionEvent e)

          {

              d.setVisible(false);

           }

       });

      d.addWindowListener(new WindowAdapter()

     { 

         public void windowClosing(WindowEvent e)

         {

             d.setVisible(false);

         }

   });

   //添加活动监听

   b.addActionListener(new ActionListener()

   {

         public void actionPerformed(ActionEvent e)

        {

             String dirPath = tf.getText();

             File dir = new File(dirPath);

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

            {

                tf.setText("");

               String[] names =dir.list();

               for(String name:names)

               {

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

               }

           }

          else

          {

              String info="您输入的信息:"+dirPath+"是错误的,请从输";

              lab.setText(info);

              d.setVisible(true);

           }

        }

   });

   f.addWindowListener(new WindowAdapter()

   { 

         //覆盖关闭窗口的方法,并添加窗口事件。

         public void windowClosing(WindowEvent e)

         {

                System.exit(0);

         }

    });

 }

    public static void main(String[] args) 

   {

     new FrameDemo5();

    }

 }

图例:

黑马程序员Java学习日记(7)GUI

(11)菜单:

MenuBar: 菜单栏。

Menu:    菜单。

MenuItem:菜单项。

1、为了将菜单栏与Freme对象关联,可以调用该框架的SetMenuBar方法,也

   就是往Frame里面添加菜单栏用的是SetMenuBar方法,并不是add方法。

2、SetMenuBar可以用add方法添加Menu,还可以添加子菜单(Menu)。

3、Menu可以用add方法添加MenuItem(菜单项)。

4、Menu本身是MenuItem的子类。

代码例子:

import java.awt.*;

import java.awt.event.*;

class  MyMenuDemo

{

      private Frame f;

      private MenuBar mb;

      private Menu m;

      private MenuItem closeItem;

      private MenuItem subItem;

      private Menu subMenu;

      MyMenuDemo()

      {

           init();

      }

      public void init()

      {

            f= new Frame("my window");

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

            f.setLayout(new FlowLayout());

            mb =new MenuBar();

            m=new Menu("文件");

            closeItem=new MenuItem("退出");

            subItem=new MenuItem("子条目");

            subMenu=new Menu("子菜单");

            subMenu.add(subItem);

            m.add(closeItem);

            m.add(subMenu);

            mb.add(m);

            f.setMenuBar(mb);

            myEvent();

           f.setVisible(true);

     }

     private void myEvent()

    { 

         f.addWindowListener(new WindowAdapter()

        { 

            public void windowClosing(WindowEvent e)

            {

                    System.exit(0);

            }

       });

      closeItem.addActionListener(new ActionListener()

      {

            public void actionPerformed(ActionEvent e)

           {

                   System.exit(0);

            }

       });

}

   public static void main(String[] args) 

  {

     new MyMenuDemo();

   }

}

图例:

黑马程序员Java学习日记(7)GUI

练习:

打开文件:

代码例子:

import java.awt.*;

import java.awt.event.*;

import java.io.*;

class MyMenuTest 

{

      private Frame f;

      private TextArea ta;

      private MenuBar bar;

      private Menu fileMenu;

      private MenuItem closeItem;

      private MenuItem saveItem;

      private MenuItem openItem;

      private FileDialog OpenDia;

      private FileDialog SaveDia; 

      MyMenuTest()

      {

            init();

      }

      public void init()

     {

         f= new Frame("my window");

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

        f.setLayout(new FlowLayout());

        bar=new MenuBar();

        fileMenu=new Menu("文件");

        openItem=new MenuItem("打开");

        saveItem=new MenuItem("保存");

        closeItem=new MenuItem("退出");

        ta=new TextArea();

        f.add(ta);

        fileMenu.add(openItem);

        bar.add(fileMenu);

        f.setMenuBar(bar);

        OpenDia =new FileDialog(f,"打开",FileDialog.LOAD);

        SaveDia =new FileDialog(f,"保存",FileDialog.SAVE);

        myEvent();

        f.setVisible(true);

     }

     private void myEvent()

    { 

          f.addWindowListener(new WindowAdapter()

          { 

              public void windowClosing(WindowEvent e)

             {

                  OpenDia.setVisible(true);

                  String dirPath=OpenDia.getDirectory();

                  String fileName=OpenDia.getFile();

                  if(dirPath==null || fileName==null)

                       return;

                   ta.setText("");

                File file =new File(dirPath,fileName);

                 try

               {

                    BufferedReader bufr = new BufferedReader(new FileReader(file));

                    String line =null;

                    while((line=bufr.readLine())!=null)

                    {

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

                     }

                   bufr.close();

                }

               catch (IOException W)

              {

                  throw new RuntimeException("读取失败");

               }

           }

   });

   closeItem.addActionListener(new ActionListener()

   {

         public void actionPerformed(ActionEvent e)

         {

                   System.exit(0);

          }

   });

       openItem.addActionListener(new ActionListener()

      {

            public void actionPerformed(ActionEvent e)

           {

                 System.exit(0);

            }

      });

}

  public static void main(String[] args) 

  {

       new MyMenuTest();

   }

}

------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"  target="blank">android培训</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"  target="blank">java培训</a>、期待与您交流! ----------