黑马程序员_java基础-图形用户接口GUI(Graphical User Interface)

时间:2023-01-27 13:32:36

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


图形用户接口GUI(GraphicalUser Interface)

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

CLI(Command line User Interface)命令行用户接口,就是常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观.比如:创建文件夹,或者删除文件夹等.

Java为GUI提供的对象都存在java.Awt和java.Swing两个包中.

java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地方法来实现功能.属重量级控件.有些依赖平台,跨平台效果不佳.

java.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Jaca实现.增强了移植性,属轻量级控件,用它的开发的图形界面能在任何系统下运行保持一致.跨平台性强.

     继承关系图

黑马程序员_java基础-图形用户接口GUI(Graphical User Interface)

Container:容器,是一个特殊的组件,该组件中可以通过add方法添加其它组件.容器中的组件的排放方式就是布局.

常见的布局管理器:

     FlowLayout(流式布局管理器)从左到右的顺序排列,Paner默认的布局管理器.

     BorderLayout(边界布局管理器)东南西北中,Frame默认的布局管理器.

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

     GridBagLayout(网格包布局管理器)非规则矩阵.

     CardLayout(卡片式布局管理器)选项卡.

练习:

importjava.awt.*;

importjava.awt.event.*;

public class FrameDemo

{

     public static void main(String[] args)

     {

         //创建一个窗体

         Frame frame = new Frame("我的窗体");

 

         // 设置窗体的长度(横坐标)为300,宽度(纵坐标)为200

         frame.setSize(300, 200);

 

         // 设置窗体弹出来时的位置

         frame.setLocation(200, 300);

 

         // 设置窗体的布局

         frame.setLayout(new FlowLayout());

 

         // 为窗体添加一个button按扭

         Button btn = new Button("这是一个按扭");

         frame.add(btn);

/*

          * 如果没有处理该事件,那么窗体将不能关闭

          //单击关闭事件

         frame.addWindowListener(newWindowAdapter()

         {

              // 重写WindowAdapter的windowClosing方法

              public voidwindowClosing(WindowEvent e)

              {

                   // 关闭窗体,也就是停止程序

                   System.exit(0);

              }

         });

         */

 

 

         // 设置窗体可见

         frame.setVisible(true);

     }

 

}

以上代码运行后,出现的窗体当点击关闭的时候,却没有反应.这是因为没有运行该事件处理的方法.如果把

frame.addWindowListener(newWindowAdapter()

{

     // 重写WindowAdapter的windowClosing方法

     public void windowClosing(WindowEvent e)

     {

         // 关闭窗体,也就是停止程序

         System.exit(0);

     }

});

这个方法的注释去掉再运行,那么窗体就能正常关闭.

 

事件监听机制的特点:

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

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

3.      监听器:将可以触发某一个事件的动作(不只一个动作)封装在一起.

4.      事件处理:对某一事件产生的动作进行处理.

前三都在java中已经定义.而我们要做的就是”事件的处理”.

 

/*

 * 练习:

 * 鼠标和键盘的一些事件

 *

 */

importjava.awt.*;

import java.awt.event.*;

 

public class MouseAndKeyEvent

{

     private Framef =null;

     private Buttonb =null;

     private TextFieldtf =null;

//构造方法

     public MouseAndKeyEvent()

{

     init();

}

 

     // 程序开始运行窗体就且有一些设置

     public void init()

     {

         /*

          * 设置窗体的基本属性

          */

         f = new Frame("MyFrame");

         b = new Button("MyButton");

         //被始化为10列的空文本

         tf = new TextField(10);

         //设置为20列的空文本

         tf.setColumns(20);

 

         f.setBounds(100, 100, 400, 260);

         f.setLayout(new FlowLayout());

         f.setVisible(true);

         this.myEvent();

        

         //添加组件到窗体中

         f.add(tf);

         f.add(b);

 

     }

 

     // 把事件处理封装到一个方法里

     public void myEvent()

     {

         // 设置窗体关闭事件

         f.addWindowListener(newWindowAdapter()

         {

              public void windowClosing(WindowEvent e)

              {

                   System.exit(0);

              }

         });

 

         // 组件活动事件,在组件被操作的时候触发该事件(比如:单击,双击.不包括进入事件,离开事件.因为必须是该组件被操作)

         b.addActionListener(newActionListener()

         {

              public void actionPerformed(ActionEvent e)

              {

                   System.out.println("组件活动了!");

              }

         });

         // 鼠标进入到组件事件

         b.addMouseListener(newMouseAdapter()

         {

              public void mouseEntered(MouseEvent e)

              {

                   System.out.println("鼠标进入组件!");

              }

         });

 

         // 鼠标离开组件事件

         b.addMouseListener(newMouseAdapter()

         {

              public void mouseExited(MouseEvent e)

              {

                   System.out.println("鼠标离开组件!");

              }

         });

 

         // 鼠标点击处理事件

         b.addMouseListener(newMouseAdapter()

         {

              public void mouseClicked(MouseEvent e)

              {

                   System.out.println("点击鼠标!");

              }

         });

 

         // 按下某个键盘时button组件(该组件必须为当前组件)的事件处理

         // 不会处理组件活动事件(ActionListener)

         // 只有该组件被单击或双击,或形成单击双击效果时,才会触发组件活动事件

         b.addKeyListener(newKeyAdapter()

         {

              public void keyPressed(KeyEvent e)

              {

                   // 按下Ctrl()键+Enter(回车)运行....

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

                   {

                       System.out.println("Ctrl + Enter is run....");

                   }

 

                   // 当按Esc键时退出程序

                   if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

                   {

                       System.exit(0);

                   }

                   // 调用键盘事件的方法

                   System.out.println("按下 " +KeyEvent.getKeyText(e.getKeyCode()) +"键!" + "编码数字:" + e.getKeyCode());

              }

         });

 

         // 释放某个键盘事件处理

         b.addKeyListener(newKeyAdapter()

         {

              public void keyReleased(KeyEvent e)

              {

                   System.out.println("松开键盘!");

              }

         });

        

         //向文本组件中写数字

         tf.addKeyListener(newKeyAdapter()

         {

              public void keyPressed(KeyEvent e)

              {

                   int code = e.getKeyCode();

                  

                   //判断按键的值是不是数字,不是数字结束当前键盘事件的处理

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

                   {

                       System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...是非法的!");

                      

                       //使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。

                       e.consume();

                   }

              }

         });

     }

 

     public static void main(String[] args)

     {

         new MouseAndKeyEvent();

     }

}

 

练习:

/*

 * 模拟记事本的读写

 */

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

 

public class MenuDemo

{

     private Frameframe;

     private MenuBarmenuBar;

     private MenufileMenu;

     private MenuItemopenItem,saveItem,closeItem;

     private TextAreatextArea;

     private Filefile;

     private FileDialogopenFileDialog,saveFileDialog;

     String directoryPath;

     String fileName;

 

     public MenuDemo()

     {

         //初始化窗体

         init();

     }

 

     public void init()

     {

         frame = new Frame("我的记事本");

         menuBar = new MenuBar();

         fileMenu = new Menu("文件");

         openItem = new MenuItem("打开");

         saveItem = new MenuItem("保存");

         closeItem = new MenuItem("退出");

         textArea = new TextArea();

         openFileDialog = new FileDialog(frame,"打开文件", FileDialog.LOAD);

         saveFileDialog = new FileDialog(frame,"保存文件", FileDialog.SAVE);

 

         //设置窗体出现的位置

         openFileDialog.setLocation(200, 200);

         saveFileDialog.setLocation(200, 200);

 

         frame.setBounds(200, 50, 600, 300);//基本设置,采用默认布局器

 

         //添加组件

         menuBar.add(fileMenu);

         fileMenu.add(openItem);

         fileMenu.add(saveItem);

         fileMenu.add(closeItem);

 

         frame.add(textArea);

         frame.setMenuBar(menuBar);

         frame.setVisible(true);

 

         //加载事件监听

         myEvent();

     }

 

     public void myEvent()

     {

         frame.addWindowListener(new WindowAdapter()

         {

              public void windowClosing(WindowEvent e)

              {

                   System.exit(0);

              }

         });

 

         closeItem.addActionListener(new ActionListener()

         {

              public void actionPerformed(ActionEvent e)

              {

                   //退出程序

                   System.exit(0);

              }

         });

 

         //按下ctrl+s键保存

         textArea.addKeyListener(new KeyAdapter()

         {

              public void keyPressed(KeyEvent e)

              {

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

                   {

                       saveFile();

                   }

              }

         });

 

         // 保存文件事件

         saveItem.addActionListener(new ActionListener()

         {

              public void actionPerformed(ActionEvent e)

              {

                   //调用保存文件方法

                   saveFile();

              }

         });

 

         // 打开文件事件

         openItem.addActionListener(new ActionListener()

         {

              public void actionPerformed(ActionEvent e)

              {

                   openFileDialog.setVisible(true);

 

                   //获取此文件对话框的目录

                   directoryPath =openFileDialog.getDirectory();

                   //获取此文件对话框的选定文件

                   fileName = openFileDialog.getFile();

 

                   if (directoryPath ==null ||fileName ==null)

                       return;

 

                   textArea.setText("");//清除textArea里面原有数据

 

                   file = new File(directoryPath,fileName);

                   // 判断该文件是否存在

                   if (file.exists())

                   {

                       BufferedReader br = null;

 

                       try

                       {

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

 

                            String line = null;

 

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

                            {

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

                            }

                       }

                       catch (Exception e2)

                       {

                            e2.printStackTrace();

                       }

                       finally

                       {

                            try

                            {

                                 if (br !=null)//关闭缓冲

                                     br.close();

                            }

                            catch (Exception e3)

                            {

                                 e3.printStackTrace();

                            }

                       }

                   }

                   else

                   {

                       System.out.println("该文件不存在!");

                       openFileDialog.setVisible(true);

                   }

              }

         });

     }

 

     //封装保存文件代码

     public void saveFile()

     {

         if (file ==null)

         {

              // 显示保存对话框

              saveFileDialog.setVisible(true);

 

              directoryPath = saveFileDialog.getDirectory();

              fileName = saveFileDialog.getFile();

              if (directoryPath ==null ||fileName ==null)

                   return;//跳出该方法

              file = new File(directoryPath,fileName);

         }

 

         BufferedWriter bw = null;

 

         try

         {

              bw = new BufferedWriter(new FileWriter(file));

 

              String text = textArea.getText();

 

              bw.write(text);

              bw.flush();

         }

         catch (Exception e2)

         {

              e2.printStackTrace();

         }

         finally

         {

              try

              {

                   if (bw !=null)

                       bw.close();

              }

              catch (Exception e3)

              {

                   e3.printStackTrace();

              }

         }

 

     }

 

     //程序入口

     public static void main(String[] args)

     {

         new MenuDemo();

     }

}